天天看點

Docker基本指令彙總

Docker的三大核心概念:鏡像、容器、倉庫

鏡像:類似虛拟機的鏡像、用俗話說就是安裝檔案。

容器:類似一個輕量級的沙箱,容器是從鏡像建立應用運作執行個體,可以将其啟動、開始、停止、删除、而這些容器都是互相隔離、互不可見的。

倉庫:類似代碼倉庫,是Docker集中存放鏡像檔案的場所。

1.設定docker自啟動

使用yum安裝好docker後,設定開機啟動。

[root@CentOS ~]# systemctl enable docker      

2.docker的啟動、停止、重新開機

[root@localhost ~]# service docker restart
Redirecting to /bin/systemctl restart docker.service
[root@localhost ~]# service docker stop
Redirecting to /bin/systemctl stop docker.service
[root@localhost ~]# service docker start
Redirecting to /bin/systemctl start docker.service      

3.docker鏡像

docker search <image>用于搜尋線上鏡像倉庫,這樣就可以搜尋出在Docker Hub上所有帶redis的公共的可用鏡像。

[root@CentOS ~]# docker search redis
INDEX       NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/redis                                Redis is an open source key-value store th...   5472      [OK]
docker.io   docker.io/bitnami/redis                        Bitnami Redis Docker Image                      82                   [OK]
docker.io   docker.io/sameersbn/redis                                                                      68                   [OK]
docker.io   docker.io/tenstartups/redis-commander                                                          32                   [OK]
docker.io   docker.io/hypriot/rpi-redis                    Raspberry Pi compatible redis image             31
docker.io   docker.io/kubeguide/redis-master               redis-master with "Hello World!"                25
docker.io   docker.io/kubeguide/guestbook-redis-slave      Guestbook redis slave                           20
docker.io   docker.io/redislabs/redis                      Clustered in-memory database engine compat...   15
docker.io   docker.io/webhippie/redis                      Docker images for redis                         9                    [OK]
docker.io   docker.io/arm32v7/redis                        Redis is an open source key-value store th...   7
docker.io   docker.io/rediscommander/redis-commander       Alpine image for redis-commander - Redis m...   7                    [OK]
docker.io   docker.io/oliver006/redis_exporter              Prometheus Exporter for Redis Metrics. Su...   5
docker.io   docker.io/rtoma/logspout-redis-logstash        Logspout including Redis adapter for sendi...   5
docker.io   docker.io/centos/redis-32-centos7              Redis in-memory data structure store, used...   3
docker.io   docker.io/dynomitedb/redis                     Redis backend for DynomiteDB.                   2                    [OK]
...      

docker pull <image>拉取伺服器鏡像倉庫裡的鏡像。

[root@CentOS ~]# docker pull redis
Using default tag: latest
Trying to pull repository docker.io/library/redis ...
latest: Pulling from docker.io/library/redis
be8881be8156: Pull complete
d6f5ea773ca3: Pull complete
735cc65c0db4: Pull complete
ff89c30e4d8c: Pull complete
59bf782a86b3: Pull complete
ce8aaa9fe90a: Pull complete
Digest: sha256:096cff9e6024603decb2915ea3e501c63c5bb241e1b56830a52acfd488873843
Status: Downloaded newer image for docker.io/redis:latest      

不指定版本,預設會下載下傳最新的一個版本。由于官方的鏡像在國外,有時網速較慢,是以推薦下載下傳國内的鏡像,比如阿裡雲,網易雲。

docker push 推送本地鏡像到伺服器。

檢視鏡像

    docker images:列出images

    docker images -a:列出所有的images(包含曆史)

    docker images --tree :顯示鏡像的所有層(layer)

    docker rmi  <image ID>:删除一個或多個image

4.docker建立一個容器

上面介紹了docker鏡像的拉取,我們接下來看下如何建立一個容器。

docker run 指令格式

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]  
 
  -d, --detach=false         指定容器運作于前台還是背景,預設為false   
  -i, --interactive=false   打開STDIN,用于控制台互動  
  -t, --tty=false            配置設定tty裝置,該可以支援終端登入,預設為false  
  -u, --user=""              指定容器的使用者  
  -a, --attach=[]            标準輸入輸出流和錯誤資訊(必須是以非docker run -d啟動的容器)
  -w, --workdir=""           指定容器的工作目錄 
  -c, --cpu-shares=0        設定容器CPU權重,在CPU共享場景使用  
  -e, --env=[]               指定環境變量,容器中可以使用該環境變量  
  -m, --memory=""            指定容器的記憶體上限  
  -P, --publish-all=false    指定容器暴露的端口  
  -p, --publish=[]           指定容器暴露的端口 
  -h, --hostname=""          指定容器的主機名  
  -v, --volume=[]            給容器挂載存儲卷,挂載到容器的某個目錄  
  --volumes-from=[]          給容器挂載其他容器上的卷,挂載到容器的某個目錄
  --cap-add=[]               添權重限,權限清單詳見:http://linux.die.net/man/7/capabilities  
  --cap-drop=[]              删除權限,權限清單詳見:http://linux.die.net/man/7/capabilities  
  --cidfile=""               運作容器後,在指定檔案中寫入容器PID值,一種典型的監控系統用法  
  --cpuset=""                設定容器可以使用哪些CPU,此參數可以用來容器獨占CPU  
  --device=[]                添加主機裝置給容器,相當于裝置直通  
  --dns=[]                   指定容器的dns伺服器  
  --dns-search=[]            指定容器的dns搜尋域名,寫入到容器的/etc/resolv.conf檔案  
  --entrypoint=""            覆寫image的入口點  
  --env-file=[]              指定環境變量檔案,檔案格式為每行一個環境變量  
  --expose=[]                指定容器暴露的端口,即修改鏡像的暴露端口  
  --link=[]                  指定容器間的關聯,使用其他容器的IP、env等資訊  
  --lxc-conf=[]              指定容器的配置檔案,隻有在指定--exec-driver=lxc時使用  
  --name=""                  指定容器名字,後續可以通過名字進行容器管理,links特性需要使用名字  
  --net="bridge"             容器網絡設定:
                                bridge 使用docker daemon指定的網橋     
                                host     //容器使用主機的網絡  
                                container:NAME_or_ID  >//使用其他容器的網路,共享IP和PORT等網絡資源  
                                none 容器使用自己的網絡(類似--net=bridge),但是不進行配置 
  --privileged=false         指定容器是否為特權容器,特權容器擁有所有的capabilities  
  --restart="no"             指定容器停止後的重新開機政策:
                                no:容器退出時不重新開機  
                                on-failure:容器故障退出(傳回值非零)時重新開機 
                                always:容器退出時總是重新開機  
  --rm=false                 指定容器停止後自動删除容器(不支援以docker run -d啟動的容器)  
  --sig-proxy=true           設定由代理接受并處理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理       

執行個體:

[root@CentOS ~]# docker run -p 8090:8080 -p 50000:50000 --restart always --link Redis:redis --name jenkins -v /home/jenkins:/home/jenkins_home --privileged=true dokcer.io/jenkins/jenkins      

     -p:把容器的8080端口映射到主控端8090上

     -v:主機的目錄/home/jenkins映射到容器的目錄/home/jenkins_home

     --name:給容器起個名字jenkins,docker.io/jenkins/jenkins是你下載下傳的鏡像

     --restart:always 容器退出時總是重新開機

  --privileged=true:挂載主機目錄Docker通路出現Permission denied的解決辦法

     --link:為redis容器起個别名Redis,通路的時候使用别名Redis

5.檢視docker容器

 docker ps      #檢視正在運作的容器

[root@CentOS ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                              NAMES
faa1b0be4e0b        docker.io/jenkins/jenkins   "/sbin/tini -- /us..."   15 hours ago        Up 4 seconds        0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins      

docker ps -a   #檢視所有容器

[root@CentOS ~]# docker ps -a
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                       PORTS                                              NAMES
45af2f4d1f82        docker.io/redis             "docker-entrypoint..."   15 hours ago        Exited (255) 3 minutes ago   0.0.0.0:6378->6379/tcp                             redis1
ffa152fb76cc        docker.io/redis             "docker-entrypoint..."   15 hours ago        Exited (255) 3 minutes ago   0.0.0.0:6379->6379/tcp                             redis
faa1b0be4e0b        docker.io/jenkins/jenkins   "/sbin/tini -- /us..."   15 hours ago        Up 2 minutes                 0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   jenkins      

6.啟動、停止、重新開機、删除docker容器

根據id和name對容器進行操作

#啟動容器
docker start <ContainerId(或者name)>
#停止容器
docker stop <ContainerId(或者name)>
#重新開機容器
docker restart <ContainerId(或者name)>
#删除容器
docker rm <ContainerId(或者name)>
#删除所有容器
docker rm $(docker ps -a -q)      

7.進入docker容器

#進入容器
docker exec -it containerID /bin/bash      

ctrl+d 退出容器且關閉

ctrl+p+q 退出容器但不關閉

8.檢視容器日志

docker logs -f -t --tail 行數 容器名

[root@CentOS ~]# docker logs -f -t --tail 10 redis #檢視容器最後10行日志
2018-08-09T05:55:16.204504000Z 1:C 09 Aug 05:55:16.135 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2018-08-09T05:55:16.205232000Z 1:C 09 Aug 05:55:16.151 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=1, just started
2018-08-09T05:55:16.205822000Z 1:C 09 Aug 05:55:16.151 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
2018-08-09T05:55:16.206545000Z 1:M 09 Aug 05:55:16.199 * Running mode=standalone, port=6379.
2018-08-09T05:55:16.207152000Z 1:M 09 Aug 05:55:16.200 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2018-08-09T05:55:16.207713000Z 1:M 09 Aug 05:55:16.200 # Server initialized
2018-08-09T05:55:16.208315000Z 1:M 09 Aug 05:55:16.200 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
2018-08-09T05:55:16.209055000Z 1:M 09 Aug 05:55:16.201 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
2018-08-09T05:55:16.209806000Z 1:M 09 Aug 05:55:16.201 * DB loaded from disk: 0.000 seconds
2018-08-09T05:55:16.210405000Z 1:M 09 Aug 05:55:16.202 * Ready to accept connections      

9.Docker網絡操作

#在主機上建立一個網絡
docker network create mynet

#檢視自定義bridge網絡
docker network inspect mynet

#移除網絡要求網絡中所有的容器關閉或斷開與此網絡的連接配接時,才能夠使用移除指令
docker network disconnet mynet 容器ID

#移除網絡
docker network rm mynet      

10.Docker拷貝操作

主控端和容器之間的拷貝操作使用 docker cp 指令,并且無論容器是否啟動都生效 

# 1.檔案從主控端拷貝到容器:    docker cp 主控端檔案路徑   容器名:存放路徑
docker cp /home/jenkins/test.txt jenkins:/var/jenkins_home

# 2.檔案從容器拷貝到主控端   docker cp 容器名:要拷貝的檔案路徑  主控端存放路徑  
docker cp jenkins:/var/jenkins_home/test.txt /home/jenkins      
上一篇: pure-ftp
下一篇: pure-ftpd