Docker 是一个开源项目最初是 DotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker是一个轻量级、便携式与外界隔离的容器,也是一个可以在容器中很方便地构建、传输、运行应用的引擎。这里简单记录下一些Docker常用命令的使用。
Docker镜像加速器
Linux
1
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
--config=~/.docker Location of client config files #客户端配置文件的位置
-D, --debug=false Enable debug mode #启用Debug调试模式
-H, --host=[] Daemon socket(s) to connect to #守护进程的套接字(Socket)连接
-h, --help=false Print usage #打印使用
-l, --log-level=info Set the logging level #设置日志级别
--tls=false Use TLS; implied by--tlsverify #
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA #信任证书签名CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file #TLS证书文件路径
--tlskey=~/.docker/key.pem Path to TLS key file #TLS密钥文件路径
--tlsverify=false Use TLS and verify the remote #使用TLS验证远程
-v, --version=false Print version information and quit #打印版本信息并退出
Commands:
attach Attach to a running container #当前shell下attach连接指定运行镜像
build Build an image from a Dockerfile #通过Dockerfile定制镜像
commit Create a new image from a container's changes #提交当前容器为新的镜像
cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container #创建一个新的容器,同run 但不启动容器
diff Inspect changes on a container's filesystem #查看docker容器变化
events Get real time events from the server#从docker服务获取容器实时事件
exec Run a command in a running container#在已存在的容器上运行命令
export Export a container's filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
history Show the history of an image #展示一个镜像形成历史
images List images #列出系统当前镜像
import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export)
info Display system-wide information #显示系统相关信息
inspect Return low-level information on a container or image #查看容器详细信息
kill Kill a running container #kill指定docker容器
load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save)
login Register or log in to a Docker registry#注册或者登陆一个docker源服务器
logout Log out from a Docker registry #从当前Docker registry退出
logs Fetch the logs of a container #输出当前容器日志信息
pause Pause all processes within a container#暂停容器
port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口
ps List containers #列出容器列表
pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器
rename Rename a container #重命名容器
restart Restart a running container #重启运行的容器
rm Remove one or more containers #移除一个或者多个容器
rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run Run a command in a new container #创建一个新的容器并运行一个命令
save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
search Search the Docker Hub for images #在docker hub中搜索镜像
start Start one or more stopped containers#启动容器
stats Display a live stream of container(s) resource usage statistics #统计容器使用资源
stop Stop a running container #停止容器
tag Tag an image into a repository #给源中镜像打标签
top Display the running processes of a container #查看容器中运行的进程信息
unpause Unpause all processes within a container #取消暂停容器
version Show the Docker version information#查看容器版本号
wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
Run 'docker COMMAND --help' for more information on a command. #运行docker命令在帮助可以获取更多信息
显示已有镜像
1 2 3 4 5 6 7 8
docker images or docker image ls 显示: REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest a2a15febcdf3 3 weeks ago 64.2MB hello-world latest fce289e99eb9 8 months ago 1.84kB
# 交互式运行centos镜像 docker run -it centos # 安装vim yum install vim -y # 退出centos镜像 exit # 查看docker镜像运行记录 root@Tony-PC:/home/tony# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d684e9735d15 centos "/bin/bash" 7 minutes ago Exited (0) 35 seconds ago loving_villa ni # 提交运行容器镜像为新的自定义镜像 docker commit d68 centos-vim # 查看docker镜像 root@Tony-PC:/home/tony# docker images REPOSITORY TAG IMAGE ID CREATED SIZE contos-vim latest e90556adf335 16 seconds ago 369MB # 运行镜像 root@Tony-PC:/home/tony# docker run -it e90 # 测试vim [root@743b1e0c3e11 /]# vim
外部访问容器
期望:一个外部能访问的flask程序
进入centos镜像
1
docker run -it centos
安装python工具包
1
yum install python-setuptools
安装flask
1
[root@47830fd38e99 /]# easy_install flask
创建flask文件
1 2 3 4
[root@47830fd38e99 /]# cd /home [root@47830fd38e99 home]# ls [root@47830fd38e99 home]# touch flask-web.py [root@47830fd38e99 home]# vim flask-web.py
写入代码
1 2 3 4 5 6 7 8
from flask import Flask app = Flask(__name__)
@app.route('/') def index(): return '<h1>Im flask, im from Centos Docker</h1>' if __name__=='__main__': app.run(host='0.0.0.0', port=9000)
退出镜像
1
[root@47830fd38e99 home]# exit
查看镜像运行记录
1 2 3 4
root@Tony-PC:/home/tony# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 47830fd38e99 centos "/bin/bash" 22 minutes ago Exited (0) 3 seconds ago jolly_prosk uriakova
root@Tony-PC:/home/tony# docker images REPOSITORY TAG IMAGE ID CREATED SIZE flask-contos latest 9d07a47feca8 8 seconds ago 374MB
运行镜像
1 2 3
root@Tony-PC:/home/tony# docker run -d -p 7000:9000 9d0 python /home/flask-web.py f53e673da36d942becdc8bf9199dcbe608569511f102904e084d5b92c4d5aaab
查看当前正在运行的镜像和端口映射
1 2 3 4 5 6
root@Tony-PC:/home/tony# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f53e673da36d 9d0 "python /home/flask-…" 6 seconds ago Up 5 seconds 0.0.0.0:7000->9000/tcp gracious_euclid root@Tony-PC:/home/tony# docker port f53 9000/tcp -> 0.0.0.0:7000
测试访问
发布容器镜像到仓库
注册dockerhub
至 https://hub.docker.com/ 注册用户
登录docker
1 2 3 4 5 6 7 8 9 10
root@Tony-PC:/home/tony# 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: 646547989 Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store
root@Tony-PC:/home/tony# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 646547989/flask-centos latest 9d07a47feca8 3 days ago 374MB flask-contos latest 9d07a47feca8 3 days ago 374MB
推送镜像
1 2 3 4 5 6
root@Tony-PC:/home/tony# docker push 646547989/flask-centos The push refers to repository [docker.io/646547989/flask-centos] 630f3a7bfad7: Pushed 877b494a9f30: Mounted from library/centos latest: digest: sha256:c81d9d2d6d595c912c5ed6215e1c2e7da14518a141ae19f226eaaa146bd68d94 size: 741
查看推送的镜像
常见问题
某些镜像无法删除
有些镜像删除的时候会提示类似:“image has dependent child images”,大概意思是镜像有依赖,即有其他 image FROM 了这个 image,可以使用下面的命令列出所有在指定 image 之后创建的 image 的父 image