学习docker——命令总结
安装docker的方法可以参考:Ubuntu、CentOS、Windows、MacOS
查看版本信息
→ ~ $ docker --version Docker version 18.03.1-ce, build 9ee9f40 → ~ $ docker -v Docker version 18.03.1-ce, build 9ee9f40
查看docker系统范围的信息
→ ~ $ docker info Containers: 10 Running: 1 Paused: 0 Stopped: 9 ..........省略了很多信息
拉取镜像
语法:docker pull [OPTIONS] image_name[:TAG|@DIGEST]
如果省略tag,则表示拉取镜像的最新版,即latest
→ ~ $ docker pull ubuntu:16.04 16.04: Pulling from library/ubuntu b234f539f7a1: Pull complete 55172d420b43: Pull complete 5ba5bbeb6b91: Pull complete 43ae2841ad7a: Pull complete f6c9c6de4190: Pull complete Digest: sha256:b050c1822d37a4463c01ceda24d0fc4c679b0dd3c43e742730e2884d3c582e3a Status: Downloaded newer image for ubuntu:16.04
查看镜像的列表
→ ~ $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 5e8b97a2a082 3 weeks ago 114MB → ~ $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 5e8b97a2a082 3 weeks ago 114MB
让指定的镜像运行指定的命令
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
→ ~ $ #让ubuntu:16.04这个镜像执行echo demo命令 → ~ $ docker run ubuntu:16.04 /bin/echo demo demo
运行某个镜像,并进入他的终端
同样是dcoker run命令,只不过要增加两个参数 -t 表示运行终端,-i 表示允许镜像接收输入,如果没有-i选项,虽然可以进入镜像的终端,但是终端中却不会执行输入的命令。
→ ~ $ docker run -t ubuntu:16.04 root@f2b4c76ecd31:/# echo demo #不会执行 ^C → ~ $ docker run -t -i ubuntu:16.04 #加上-i选项之后,才会接收命令,并执行,然后返回结果 root@d4f1a80e3e03:/# echo demo demo root@d4f1a80e3e03:/#
删除镜像
语法:docker rmi [OPTIONS] images:tag [image_name:tag...]
→ ~ $ docker rmi ubuntu:16.04 Error response from daemon: conflict: unable to remove repository reference "ubuntu:16.04" (must force) - container eaf56a153cfc is using its referenced image 5e8b97a2a082 → ~ $ docker rmi -f ubuntu:16.04 Untagged: ubuntu:16.04 Untagged: ubuntu@sha256:b050c1822d37a4463c01ceda24d0fc4c679b0dd3c43e742730e28 84d3c582e3a Deleted: sha256:5e8b97a2a0820b10338bd91674249a94679e4568fd1183ea46acff63b9883e9c
删除镜像后,镜像所占的空间并不会立即释放。
登录到镜像库
语法:docker login [OPTIONS] [SERVER]
如果不指定server时,默认的是登录到docker hub,地址是:https://hub.docker.com/,注册之后登录。
如果你登录的是hub.docker.com,那么就不要再server的位置写hub.docker.com
→ ~ $ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: ****** Password: Login Succeeded
如果是在shell脚本中登录到docker仓库,可以使用-u 和-p选项
#!/bin/bash #登录到镜像仓库 #登录到外网的hub.docker.com #docker login -u username -p userpwd #登录到hub.server.com #docker login -u username -p userpwd hub.server.com
退出登录
和登录过程类似
→ ~ $ docker logout #默认是从hub.docker.com退出 Removing login credentials for https://index.docker.io/v1/ → ~ $ → ~ $ docker logout hub.whichserver.com #从hub.whichserver.com退出 Not logged in to hub.whichserver.com
对容器进行操作
→ ~ $ docker ps #查看正在运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b76729da804 training/webapp "python app.py" 14 hours ago Up 14 hours 0.0.0.0:32768->5000/tcp hardcore_meitner → ~ $ → ~ $ → ~ $ docker pause 2b76729da804 #暂停容器运行 2b76729da804 → ~ $ → ~ $ → ~ $ docker ps #查看正在运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f2b4c76ecd31 ubuntu:16.04 "/bin/bash" 3 hours ago Up 3 hours pedantic_leavitt f8b790400a64 ubuntu:16.04 "/bin/bash" 3 hours ago Up 3 hours competent_ride → ~ $ docker stop f2b4c76ecd31 #停止容器的运行 f2b4c76ecd31 → ~ $ docker start f2b4c76ecd31 #启动一个被停止的容器 f2b4c76ecd31 → ~ $ docker ps #查看正在运行的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f2b4c76ecd31 ubuntu:16.04 "/bin/bash" 3 hours ago Up 4 seconds pedantic_leavitt → ~ $ docker start f2b4c76ecd39 # 错误,因为容器ID错误,没有改容器 → ~ $ → ~ $ → ~ $ docker rm f2b4c76ecd31 #删除一个正在运行的容器会失败,需要先将运行的容器stop之后,再进行rm Error response from daemon: You cannot remove a running container f2b4c76ecd31589e4393676865cd055dd660553f2428bcdfe52dc8a451beee97. Stop the container before attempting removal or force remove → ~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f2b4c76ecd31 ubuntu:16.04 "/bin/bash" 4 hours ago Up 4 minutes pedantic_leavitt → ~ $ docker stop f2b4c76ecd31 #停止容器运行 f2b4c76ecd31 → ~ $ docker rm f2b4c76ecd31 #删除一个已经停止的容器 f2b4c76ecd31
注意:删除容器使用的rm,删除镜像使用rmi
上传镜像
标记镜像 docker tag exists_image:tag new_image_name:new_tag
→ ~ $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 5e8b97a2a082 3 weeks ago 114MB → ~ $ docker ubuntu:16.04 my_img:v1 docker: 'ubuntu:16.04' is not a docker command. See 'docker --help' → ~ $ docker tag ubuntu:16.04 my_img:v1 → ~ $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE my_img v1 5e8b97a2a082 3 weeks ago 114MB ubuntu 16.04 5e8b97a2a082 3 weeks ago 114MB → ~ $
上传镜像
注意,
1、在上传镜像之前,要先登录。
2、你的docker仓库必须要有一个repository,然后你才可以将你的镜像push到这个repository中,否则你的操作就是非法的。
3、进行打tag时,new_image_name其实就是repository的名字,new_tag就是上传之后,你的镜像版本。
比如,有一个ganlixin/ubuntu仓库,那么,
→ ~ $ docker tag ubuntu:16.04 ganlixin/centos:v1 → ~ $ docker push ganlixin/centos:v1 The push refers to repository [docker.io/ganlixin/centos] 2de391e51d73: Pushed d73dd9e65295: Pushed 686245e78935: Pushed d7ff1dc646ba: Pushed 644879075e24: Pushed v1: digest: sha256:689aa49d87d325f951941d789f7f7c8fae3394490cbcf084144caddba9c1be12 size: 1357 → ~ $
登录docker,查看tag