常用命令
- docker images 列出所有镜像
- docker ps 查看正在运行的容器
- docker ps -a 查看所有容器,包括不在运行的
- docker rmi [image_name] 删除镜像,如果有已经存在的该镜像的容器,则无法删除
- docker rm [container_name] 删除容器,如果正在运行则无法删除,如果要删除正在运行的容器,则需要加-f选项
- docker [cmd] --help可以查看对应命令的帮助信息
启动容器
docker run -d -p 80:80 --name webserver nginx
以nginx:latest为镜像运行一个容器,各选项含义如下:
- -d选项:设置detach为true,根据官方的文档,意思是让这个命令在后台运行
- --name指定一个容器的自定义名称为webserver
- -p 指定宿主主机端口与容器端口之间的映射,即宿主主机的80端口映射到容器的端口80上,也可以用-P自动指定端口。
在容器中运行命令
docker exec -it webserver bash
我们以交互式终端方式进入 webserver 容器,并执行了 bash 命令,也就是获
得一个可操作的 Shell。
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
外部访问容器实现
容器允许外部访问,可以在 docker run 时候通过 -p 或 -P 参数来启用。
不管用那种办法,其实也是在本地的 iptable 的 nat 表中添加相应的规则。
#iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DEFAULT_OUTPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
DEFAULT_POSTROUTING all -- 0.0.0.0/0 0.0.0.0/0
Chain DEFAULT_OUTPUT (1 references)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain DEFAULT_POSTROUTING (1 references)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:80
Chain DOCKER (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8081 to:172.17.0.2:80
注意:
1. 这里的规则映射了 0.0.0.0,意味着将接受主机来自所有接口的流量。用户可以
通过 -p IP:host_port:container_port 或 -p IP::port 来指定允许访
问容器的主机上的 IP、接口等,以制定更严格的规则。
2. 如果希望永久绑定到某个固定的 IP 地址,可以在 Docker 配置文件
/etc/default/docker 中指定 DOCKER_OPTS="--ip=IP_ADDRESS" ,之后
重启 Docker 服务即可生效。
保存镜像到文件
docker save -o nginx.tar nginx
从文件中加载镜像
sudo docker load --input nginx.tar
给镜像打标签
sudo docker tag nginx xxx/xxx/nginx:1.0
docker登录
sudo docker login xxx
push镜像到本地仓库
sudo docker push xxx.com/xxx/nginx:1.0
制作docker镜像
sudo docker build -t "xx.com/xx/xx:0.1" .
批量删除已经停止的容器
sudo docker rm $(sudo docker ps -a|grep "Exited"|awk "{print \$1}")
批量删除没用的镜像
sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}")
文章评论