学习Docker记录

2018-02-01 1664点热度 0人点赞 0条评论

常用命令

- 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}")

王显锋

激情工作,快乐生活!

文章评论