1. 程式人生 > >Docker介紹及常用操作演示--技術流ken

Docker介紹及常用操作演示--技術流ken

scrip imp rest comment 建議 tar ani 資源 端口

Docker簡介

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。

一個完整的Docker有以下幾個部分組成:

  1. dockerClient客戶端
  2. Docker Daemon守護進程
  3. Docker Image鏡像
  4. DockerContainer容器

--摘自360百科

容器:

存儲、運輸工具

實現對容器內部的物品實現包含(實現了一個相對隔離的環境)

容器:模擬(虛擬)出一個相對隔離的空間

鏡像:

用來創建容器的模版,放在鏡像倉庫中,例如nginx,redis,httpd等

Docker與Kvm的對比

kvm:

1. 虛擬機

2. 使用復雜

3. 啟動過程相對慢(分鐘)

4. 模版文件較大

5. 和物理完全隔離

6. 模擬的是一個完整系統,可以登錄並實現管理

docker:

1. 直接虛擬出來一個用戶空間

2. 使用簡單

3. 啟動非常塊(秒級)

4. 模版文件很小

5. 在一定程度上和物理機隔離

6. 僅僅是模擬一部分用戶空間,不方便管理

Docker使用理由

1. 快速部署服務

2. 多租戶

3. 實現隔離

4. 讓一個主機運行多個容器

5. 提高開發效率

6. 簡化配置過程

7. 實現軟件的跨平臺

Docker鏡像加速配置

第一步:打開阿裏雲網站

 https://www.aliyun.com/?utm_content=se_1000301910

第二步:進行阿裏雲註冊

第三步:點擊控制臺

技術分享圖片

第四步:點擊產品與服務>鏡像與服務

技術分享圖片

第五步:點擊鏡像加速器,記住自己的加速器地址

技術分享圖片

Docker的安裝與配置

安裝docker需要配置網絡yum源,centos7自帶的版本太低了

第一步:使用yum即可進行安裝

docker-ce是社區版,是免費的

docker-ee是企業版,是收費的

這裏我們下載社區版的

[root@ken ~]# yum install docker-ce -y

第二步:添加加速器地址

把剛才註冊得到的鏡像加速地址如下步驟填寫進去

[root@ken ~]# mkdir /etc/docker
[root@ken ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://XXX.mirror.aliyuncs.com"]
}

第三步:重啟docker

[root@ken ~]# systemctl restart docker

Docker有關鏡像的操作命令詳解

第一步:獲取鏡像的使用幫助

[root@ken ~]# docker image --help

Usage:    docker image COMMAND

Manage images

第二步:docker鏡像的使用命令詳解

  build       從docker文件裏面創建鏡像
  history     顯示一個鏡像的歷史
  import      從tarball導入內容以創建文件系統映像
  inspect     顯示一個一個或多個鏡像的詳細信息
  load        加載一個鏡像從tar壓縮包或者標準輸入
  ls          列出鏡像
  prune       移除沒有被使用的鏡像
  pull        從註冊處拉取一個鏡像或者鏡像庫
  push        把一個鏡像或者鏡像庫推送至註冊處
  rm          移除一個或多個鏡像
  save        保存一個或者多個鏡像到tar壓縮包,默認情況下流式傳輸到
  tag         創建一個引用SOURCE_IMAGE的標記TARGET_IMAGE

Docker鏡像的操作命令演示

一. 查看註冊表中是否有nginx鏡像

[root@ken ~]# docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        10326               [OK]                
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con??  1471                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of??  650                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p??  441                                     [OK]
kong                                                   Open-source Microservice & API Management la??  249                 [OK]                
webdevops/php-nginx                                    Nginx with PHP-FPM                              117                                     [OK]
kitematic/hello-world-nginx                            A light-weight nginx container that demonstr??  112                                     
...

二.下載nginx鏡像

[root@ken ~]# docker image pull nginx

三:查看本地鏡像

[root@ken ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e81eb098537d        10 days ago         109MB

四:導入鏡像

這裏我準備了一個redis的鏡像壓縮包

這樣就獲取到了redis的鏡像

壓縮包不需要解壓

[root@ken ~]# docker image load < redis_img.tar.gz 
d626a8ad97a1: Loading layer [==================================================>]  58.46MB/58.46MB
fd0ff4158c63: Loading layer [==================================================>]  338.4kB/338.4kB
f1e69ab74fb6: Loading layer [==================================================>]  3.034MB/3.034MB
5935063a73de: Loading layer [==================================================>]  24.83MB/24.83MB
72ebea29957d: Loading layer [==================================================>]  1.536kB/1.536kB
56631ad86187: Loading layer [==================================================>]  3.584kB/3.584kB
Loaded image: redis:latest
[root@ken ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e81eb098537d        10 days ago         109MB
redis               latest              55cb7014c24f        5 months ago        83.4MB
[root@ken ~]# 

五:鏡像導出

寫成壓縮包的形式

[root@ken ~]# docker image save  nginx > /tmp/nginx.tar.gz
[root@ken ~]# ls /tmp/nginx.tar.gz
/tmp/nginx.tar.gz

六:顯示nginx鏡像的詳細信息

[root@ken ~]# docker inspect nginx
[
    {
        "Id": "sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a",
        "RepoTags": [
            "nginx:latest"
        ],
        "RepoDigests": [
            "nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2018-11-16T13:32:10.147294787Z",
        "Container": "d4fa15093ad8ad3df60d7403c1752a379503686e32a76b70771b3ea268ec5d66",
        "ContainerConfig": {
            "Hostname": "d4fa15093ad8",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "ExposedPorts": {
...

七:刪除nginx的鏡像

[root@ken ~]# docker image rm nginx
Untagged: nginx:latest
Untagged: nginx@sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991
Deleted: sha256:e81eb098537d6c4a75438eacc6a2ed94af74ca168076f719f3a0558bd24d646a
Deleted: sha256:7055505a92c39c6f943403d54a1cda020bfeb523b55d9d78bfe1dad0dd32bb2d
Deleted: sha256:378a8fcc106dc4d3a9f2dc0b642b164e25de3aab98a829e72b2d8c0cf0bad8ee
Deleted: sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3
[root@ken ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              55cb7014c24f        5 months ago        83.4MB

Docker有關容器的操作命令詳解

第一步:獲取容器的命令的使用幫助

[root@ken ~]# docker container --help

Usage:    docker container COMMAND

Manage containers

第二步:docker容器的使用命令詳解

  attach      將本地標準輸入,輸出和錯誤流附加到正在運行的容器
  commit      根據容器的更改創建新鏡像
  cp          在容器和本地文件系統之間復制文件/文件夾
  create      創建一個新的容器
  diff        檢查容器文件系統上的文件或目錄的更改
  exec        在正在運行的容器中運行命令
  export      將容器的文件系統導出為tar存檔
  inspect     顯示一個或多個容器的詳細信息
  kill        殺死一個或多個正在運行的容器
  logs        獲取容器的日誌
  ls          列出容器
  pause       暫停一個或多個容器中的所有進程
  port        列出端口映射或容器的特定映射
  prune       刪除所有已停止的容器
  rename      重命名容器
  restart     重啟一個或多個容器
  rm          刪除一個或多個容器
  run         在新容器中運行命令
  start       啟動一個或多個已停止的容器
  stats       顯示容器資源使用情況統計信息的實時流
  stop        停止一個或多個正在運行的容器
  top         顯示容器的運行進程
  unpause     取消暫停一個或多個容器中的所有進程
  update      更新一個或多個容器的配置
  wait        等待,直到一個或多個容器停止,然後打印退出代碼

Docker容器的操作命令演示

一.啟動redis容器

--name:指定容器名字

-d:表示後臺運行

[root@ken ~]# docker container  run --name redis1 -d redis
4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd

二.查看容器

使用ls

[root@ken ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   39 seconds ago      Up 38 seconds       6379/tcp            redis1

三.查看所有的容器

ps -a: 列出所有的容器包括運行和停止的

ps: 僅僅列出正在運行的

[root@ken ~]# docker container ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                     PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   About a minute ago   Up About a minute          6379/tcp            redis1
054bc8b8aab7        redis               "docker-entrypoint.s??   2 minutes ago        Exited (0) 2 minutes ago                       confident_goldstine

四.查看容器的詳細信息

inspect後面加上容器名字即可獲取有關容器的詳細信息

[root@ken ~]# docker container  inspect redis1
[
    {
        "Id": "4cd31fa09d483ed87c8fe390a49c13fdba0652df33e2ae1cb44a1f8426578afd",
        "Created": "2018-11-26T20:22:23.099937767Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "redis-server"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
...

五.停止容器

使用stop

[root@ken ~]# docker container stop redis1
redis1
[root@ken ~]# docker container ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

六.啟動容器

使用start

[root@ken ~]# docker container start redis1
redis1
[root@ken ~]# docker container ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   8 minutes ago       Up 1 second         6379/tcp            redis1

七.登錄容器

第一種方法:

exec -it 容器名 /bin/sh

-i: 表示啟動為交互模式

-t:表示分配一個終端

登錄進去之後發現我們可以執行有掛redis的命令了

[root@ken ~]# docker container exec -i -t redis1 /bin/sh 
# 
# 
# redis-cli
127.0.0.1:6379> set ken 520
OK
127.0.0.1:6379> get ken
"520"

退出之後容器沒有停止

[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   13 minutes ago      Up 4 minutes        6379/tcp            redis1

第二種方法:

attach:會導致當退出的時候,自動停止容器

不建議使用

[root@ken ~]# docker container attach redis1




^C1:signal-handler (1543264604) Received SIGINT scheduling shutdown...
1:M 26 Nov 20:36:44.315 # User requested shutdown...
1:M 26 Nov 20:36:44.315 * Saving the final RDB snapshot before exiting.
1:M 26 Nov 20:36:44.327 * DB saved on disk
1:M 26 Nov 20:36:44.327 # Redis is now ready to exit, bye bye...
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

第三種方法:

基於nsenter進入

第一步:啟動容器

[root@ken ~]# docker container start redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   16 minutes ago      Up 6 seconds        6379/tcp            redis1

第二步:獲取容器的pid

[root@ken ~]# docker container inspect -f {{.State.Pid}} redis1
6036

第三步:登錄容器

-t: 從中獲取名稱空間的目標進程

-u: 輸入UTS名稱空間(主機名等)

-i: 進入System V IPC命名空間

-n: 輸入網絡命名空間

-p:輸入pid命名空間

[root@ken ~]#  nsenter -t 6036 -u -i -n -p
[root@4cd31fa09d48 ~]# ps
  PID TTY          TIME CMD
 2595 pts/0    00:00:01 bash
 6216 pts/0    00:00:00 nsenter
 6217 pts/0    00:00:00 bash
 6250 pts/0    00:00:00 ps

退出時不會停止容器

[root@4cd31fa09d48 ~]# exit
logout
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4cd31fa09d48        redis               "docker-entrypoint.s??   23 minutes ago      Up 6 minutes        6379/tcp            redis1

八.刪除容器

第一步:需要停止容器

[root@ken ~]# docker container stop redis1
redis1
[root@ken ~]# docker container ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

第二步:刪掉容器

[root@ken ~]# docker container rm redis1
redis1
[root@ken ~]# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Docker介紹及常用操作演示--技術流ken