Docker | 第三章:Docker經常使用命令

前言

上一章節,簡單介紹了在CentOS下的Docker的安裝過程,以及運行了一個官方提供的Hello,World鏡像運行了第一個Docker。就像上一章中,驗證Docker是否安裝成功,咱們執行的是docker info命令。運行鏡像時,執行的是docker run imagesName。因此學習一個工具,主要仍是學習如何利用自己工具提供的一些命令進行相應的操做。因此本章節,主要來介紹下Docker的經常使用命令。html

Docker命令清單

docker提供了查看其全部支持的命令清單,只需運行nginx

docker

redis

docker help

命令清單

從提示中能夠看出,Docker命令是不少的,能夠管理Docker,有操做鏡像容器等等。對於經常使用的可能就是操做鏡像容器了。因此這裏主要列舉下對於鏡像容器經常使用的一些命令操做,同時也會列舉下一些其餘經常使用的命令。對於某個命令想知道其詳細的參數選項時,可依照此模式進行查看。docker

docker COMMAND --help

如,查看run的詳細信息shell

docker run --help

列舉的run的詳細選項及其用法說明(真的不少呀!)json

Usage:    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Run a command in a new container

Options:
      --add-host list                  Add a custom host-to-IP mapping (host:ip)
  -a, --attach list                    Attach to STDIN, STDOUT or STDERR
      --blkio-weight uint16            Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
      --blkio-weight-device list       Block IO weight (relative device weight) (default [])
      --cap-add list                   Add Linux capabilities
      --cap-drop list                  Drop Linux capabilities
      --cgroup-parent string           Optional parent cgroup for the container
      --cidfile string                 Write the container ID to the file
      --cpu-period int                 Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int                  Limit CPU CFS (Completely Fair Scheduler) quota
      --cpu-rt-period int              Limit CPU real-time period in microseconds
      --cpu-rt-runtime int             Limit CPU real-time runtime in microseconds
  -c, --cpu-shares int                 CPU shares (relative weight)
      --cpus decimal                   Number of CPUs
      --cpuset-cpus string             CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string             MEMs in which to allow execution (0-3, 0,1)
  -d, --detach                         Run container in background and print container ID
      --detach-keys string             Override the key sequence for detaching a container
      --device list                    Add a host device to the container
      --device-cgroup-rule list        Add a rule to the cgroup allowed devices list
      --device-read-bps list           Limit read rate (bytes per second) from a device (default [])
      --device-read-iops list          Limit read rate (IO per second) from a device (default [])
      --device-write-bps list          Limit write rate (bytes per second) to a device (default [])
      --device-write-iops list         Limit write rate (IO per second) to a device (default [])
      --disable-content-trust          Skip image verification (default true)
      --dns list                       Set custom DNS servers
      --dns-option list                Set DNS options
      --dns-search list                Set custom DNS search domains
      --entrypoint string              Overwrite the default ENTRYPOINT of the image
  -e, --env list                       Set environment variables
      --env-file list                  Read in a file of environment variables
      --expose list                    Expose a port or a range of ports
      --group-add list                 Add additional groups to join
      --health-cmd string              Command to run to check health
      --health-interval duration       Time between running the check (ms|s|m|h) (default 0s)
      --health-retries int             Consecutive failures needed to report unhealthy
      --health-start-period duration   Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s)
      --health-timeout duration        Maximum time to allow one check to run (ms|s|m|h) (default 0s)
      --help                           Print usage
  -h, --hostname string                Container host name
      --init                           Run an init inside the container that forwards signals and reaps processes
  -i, --interactive                    Keep STDIN open even if not attached
      --ip string                      IPv4 address (e.g., 172.30.100.104)
      --ip6 string                     IPv6 address (e.g., 2001:db8::33)
      --ipc string                     IPC mode to use
      --isolation string               Container isolation technology
      --kernel-memory bytes            Kernel memory limit
  -l, --label list                     Set meta data on a container
      --label-file list                Read in a line delimited file of labels
      --link list                      Add link to another container
      --link-local-ip list             Container IPv4/IPv6 link-local addresses
      --log-driver string              Logging driver for the container
      --log-opt list                   Log driver options
      --mac-address string             Container MAC address (e.g., 92:d0:c6:0a:29:33)
  -m, --memory bytes                   Memory limit
      --memory-reservation bytes       Memory soft limit
      --memory-swap bytes              Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --memory-swappiness int          Tune container memory swappiness (0 to 100) (default -1)
      --mount mount                    Attach a filesystem mount to the container
      --name string                    Assign a name to the container
      --network string                 Connect a container to a network (default "default")
      --network-alias list             Add network-scoped alias for the container
      --no-healthcheck                 Disable any container-specified HEALTHCHECK
      --oom-kill-disable               Disable OOM Killer
      --oom-score-adj int              Tune host's OOM preferences (-1000 to 1000)
      --pid string                     PID namespace to use
      --pids-limit int                 Tune container pids limit (set -1 for unlimited)
      --privileged                     Give extended privileges to this container
  -p, --publish list                   Publish a container's port(s) to the host
  -P, --publish-all                    Publish all exposed ports to random ports
      --read-only                      Mount the container's root filesystem as read only
      --restart string                 Restart policy to apply when a container exits (default "no")
      --rm                             Automatically remove the container when it exits
      --runtime string                 Runtime to use for this container
      --security-opt list              Security Options
      --shm-size bytes                 Size of /dev/shm
      --sig-proxy                      Proxy received signals to the process (default true)
      --stop-signal string             Signal to stop a container (default "SIGTERM")
      --stop-timeout int               Timeout (in seconds) to stop a container
      --storage-opt list               Storage driver options for the container
      --sysctl map                     Sysctl options (default map[])
      --tmpfs list                     Mount a tmpfs directory
  -t, --tty                            Allocate a pseudo-TTY
      --ulimit ulimit                  Ulimit options (default [])
  -u, --user string                    Username or UID (format: <name|uid>[:<group|gid>])
      --userns string                  User namespace to use
      --uts string                     UTS namespace to use
  -v, --volume list                    Bind mount a volume
      --volume-driver string           Optional volume driver for the container
      --volumes-from list              Mount volumes from the specified container(s)
  -w, --workdir string                 Working directory inside the container

鏡像經常使用命令

  • 搜索鏡像,利用search命令。
docker search jdk
  • 拉取鏡像,利用pull命令。
用法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  docker pull jboss/base-jdk:8

拉取jdk8

  • 查看已下載鏡像列表,利用images命令
docker images jboss/base-jdk:8

可查看全部已下載的鏡像:服務器

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              2cb0d9787c4d        2 weeks ago         1.85kB
  • 鏡像拷貝,同時重命名,利用tag命令
# 好比,想建立拷貝一個鏡像`hello-wrold`,同時命名爲`lqdev.cn/hello-world:1`
  docker tag hello-world lqdev.cn/hello-world:1

此時查看鏡像列表,就會發現多了一個鏡像了:網絡

[root@xx ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
hello-world            latest              2cb0d9787c4d        2 weeks ago         1.85kB
lqdev.cn/hello-world   1                   2cb0d9787c4d        2 weeks ago         1.85kB
  • 基於Dockerfile建立一個新的鏡像,利用build命令(對於Dockerfile,在下一章節會詳細進行說明的,這裏就不過多介紹了。)
# 使用當前目錄下的Dockerfile,同時鏡像命名(`-t`,指tag)爲:lqdev.cn/first:1
docker build -t lqdev.cn/first:1
  • 刪除鏡像,利用rmi命令(這裏須要注意,當鏡像有容器在使用時,是沒法刪除的,須要先刪除容器再來刪除鏡像。)
docker rmi jboss/base-jdk:8
  或者根據images_id刪除
  docker rmi b123d943e165

容器經常使用命令

  • 運行容器,利用run命令。
docker run hello-world

運行命令是最經常使用的命令了,這裏其經常使用選項進行列舉說明下app

-a stdin: 指定標準輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;
-d: 後臺運行容器,並返回容器ID;
-i: 以交互模式運行容器,一般與 -t 同時使用;
-p: 端口映射,格式爲:主機(宿主)端口:容器端口
-t: 爲容器從新分配一個僞輸入終端,一般與 -i 同時使用;
--name="nginx-lb": 爲容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的DNS服務器,默認和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默認和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 設置環境變量;
--env-file=[]: 從指定文件讀入環境變量;
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定CPU運行;
-m :設置容器使用內存最大值;
--net="bridge": 指定容器的網絡鏈接類型,支持 bridge/host/none/container: 四種類型;
--link=[]: 添加連接到另外一個容器;
--expose=[]: 開放一個端口或一組端口;

好比,咱們後臺運行redis實例,同時指定其宿主端口爲16379dom

docker run -p 16379:6379 -d redis:3.2
  • 容器列表,使用ps命令,能夠列舉出當前運行的容器,須要全部容器時,加入-a選項便可。
docker ps -a

此時,可看見全部的容器信息:

CONTAINER ID        IMAGE                    COMMAND             CREATED             STATUS                     PORTS               NAMES
3ba5b7475423        lqdev.cn/hello-world:1   "/hello"            7 seconds ago       Exited (0) 6 seconds ago                       distracted_goldwasser
02f1c3cc2a31        hello-world              "/hello"            20 hours ago        Exited (0) 20 hours ago                        vibrant_ritchie
  • 中止容器,利用stop命令。
# docker stop 容器id
 docker stop 3ba5b7475423
  • 啓動已中止容器,利用start命令。
# docker start 容器id
   docker start 3ba5b7475423
  • 重啓容器,利用restart命令。
# docker restart 容器id
  docker restart 3ba5b7475423
  • 強制中止容器,利用kill命令。
# docker kill 容器id
  docker kill 3ba5b7475423
  • 刪除容器,利用rm命令(只能刪除已經中止的容器,若須要刪除正在運行的容器,可加入-f參數選項)
# docker rm 容器ID
 docker rm 3ba5b7475423
  • 進入容器,在一些場景下,好比想查看redis的客戶端redis-cli時,這個時候就須要進入容器了。進入容器有不少中,這裏就exec進行講解下,其餘的好比attach不熟悉,你們可自行搜索下。
# docker exec -it 容器ID 參數
  docker exec -it 3ba5b7475423 redis-cli  
  參數說明:
    -d:分離模式: 在後臺運行    
    -i:即便沒有附加也保持STDIN 打開
    -t:分配一個僞終端

此時就能夠看見已經進入到客戶端了,進行相應操做了。

[root@xxx ~]# docker exec -it 3ba5b7475423 redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set name okong
OK
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"okong"
127.0.0.1:6379>
  • 容器中建立一個鏡像。在製做一些私有鏡像時,經常是依賴於一個基礎鏡像後,而後進入容器中進行相關係統環境的配置,或者相應的優化。但若容器一刪除,以前的修改都會沒有了。故在這些場景下,可直接從修改後的容器中建立一個本身的私有鏡像,這樣裏面的一些環境和相關優化項仍是保留的。這個主要會在構建私有鏡像章節時具體展開。
# docker commit [options] 容器id name:tag
  docker commit 3ba5b7475423 lqdev.cn/redis:1
  參數說明:
    -a:提交的鏡像做者
    -c:使用Dockerfile指令來建立鏡像
    -m:提交時的說明文字
    -p:在commit時,將容器暫停

commit說明

其餘經常使用命令

  • 查看日誌,利用logs命令。
# docker logs [OPTIONS] 容器ID
   docker logs -f 3ba5b7475423
   參數說明:
     -f : 跟蹤日誌輸出
    --since :顯示某個開始時間的全部日誌
     -t : 顯示時間戳
    --tail :僅列出最新N條容器日誌

logs

  • 宿主和容器之間相互拷貝文件,利用cp命令。

cp命令介紹

簡單來講就是:

# docker cp 容器名:要拷貝的文件在容器裏面的路徑  要拷貝到宿主機的相應路徑
 # docker cp 要拷貝的文件路徑 容器名:要拷貝到容器裏面對應的路徑
 docker cp 3ba5b7475423:/opt/a.json /opt
 docker cp /opt/a.json 3ba5b7475423:/opt

總結

本章節主要是介紹了下Docker的一些經常使用命令的說明。文中未列舉的命令,你們可直接使用命令docker command --help查看其命令說明或者自行谷歌下。熟悉了這些經常使用命令後,下一章節,主要會介紹下Dockerfile文件的語法及簡單示例。

最後

若文中有錯誤或者遺漏之處,還望指出,共同進步!

參考資料

  1. https://docs.docker.com/engine/reference/commandline/docker/
  2. http://www.runoob.com/docker/docker-command-manual.html

老生常談

  • 我的QQ:499452441
  • 公衆號:lqdevOps

公衆號

我的博客:http://blog.lqdev.cn

原文地址:http://blog.lqdev.cn/2018/07/31/docker/docker-three/

相關文章
相關標籤/搜索