docker 常用命令
### 一、docker启动
- Ubuntu Docker
```sh
>> su root #切换到root用户
>> systemctl enable docker #设置开机自动启用docker服务
>> systemctl start docker #启动docker 服务
```
- CentOS Docker
```sh
$ sudo systemctl enable docker #设置开机自动启用docker服务
$ sudo systemctl start docker #启动docker 服务
```
### 二、关闭docker
- Ubuntu Docker
```sh
>> systemctl stop docker #关闭docker 服务
```
- CentOS Docker
```sh
$ sudo systemctl stop docker #关闭docker 服务
```
### 三、重启docker
- Ubuntu Docker
```sh
>> systemctl restart docker #重启docker 服务
```
- CentOS Docker
```sh
$ sudo systemctl restart docker #重启docker 服务
```
### 四、卸载 docker
- Ubuntu Docker
```sh
>> sudo apt-get purge docker-ce # 删除安装包
>> sudo rm -rf /var/lib/docker # 删除镜像、容器、配置文件等内容
```
- CentOS Docker
```sh
$ yum remove docker-ce # 删除安装包
$ rm -rf /var/lib/docker # 删除镜像、容器、配置文件等内容
```
### 五、镜像加速
> Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
> - 科大镜像:https://docker.mirrors.ustc.edu.cn/
> - 网易:https://hub-mirror.c.163.com/
> - 阿里云:https://<你的ID>.mirror.aliyuncs.com
> - 七牛云加速器:https://reg-mirror.qiniu.com
- Ubuntu14.04、Debian7Wheezy
对于使用 upstart 的系统而言,编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中配置加速器地址:
```sh
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
```
重新启动服务:
```sh
$ sudo service docker restart
```
- Ubuntu16.04+、Debian8+、CentOS7
对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):
```sh
{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
```
之后重新启动服务:
```sh
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
```
### 六、镜像使用
- 列出镜像列表
```sh
$ docker images
```
- 获取一个新的镜像
```sh
$ docker pull 仓库源:标签
```
- 查找镜像
```sh
$ docker search 仓库源
```
- 删除镜像
```sh
$ docker rmi 仓库源:标签
```
### 七、容器使用
- 1、获取镜像
```sh
$ docker pull nginx
```
- 2、启动容器
```sh
$ docker run -itd --name nginx-test nginx /bin/bash
```
> - -i: 交互式操作。
> - -t: 终端。
> - -d: 后台运行
> - --name nginx-test:容器名称。
> - nginx: nginx 镜像
> - /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。(要退出终端,直接输入 exit)
- 3、提交容器副本为镜像:
```sh
$ docker commit -m="new conent" -a="lqs" e218edb10161 lqs/nginx-test:v1
# -m: 提交的描述信息
# -a: 指定镜像作者
# e218edb10161:容器 ID
# lqs/nginx-test:v1: 指定要创建的目标镜像名
```
- 4、查看所有的容器
```sh
$ docker ps -a
```
- 5、停止一个容器
```sh
$ docker stop <容器 ID>
```
- 6、启动已停止运行的容器
```sh
$ docker start <容器 ID>
$ docker restart <容器 ID>
```
- 7、进入容器
- docker attach # 退出容器会停止
- docker exec # 推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
```sh
$ docker exec -it nginx-test /bin/bash
```
- 8、导出容器
```sh
$ docker export nginx-test > nginx.tar
```
- 9、导入容器快照
> 可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 nginx.tar 导入到镜像 test/nginx:v1:
```sh
$ cat docker/nginxtar | docker import - test/nginx:v1
```
- 10、删除容器
```sh
$ docker rm -f <容器 ID>
```
### 八、容器的端口映射
- 1、查看容器端口的映射情况
```sh
$ docker port <容器 ID | 容器名称>
```
- 2、容器启动时可以指定通信协议,比如tcp、udp
```sh
$ docker run -ti -d --name nginx-test -p 8080:80/tcp docker.io/nginx
$ docker run -ti -d --name nginx-test -p 192.168.10.214:8081:80/udp docker.io/nginx
```
- 3、容器启动绑定多IP和端口(跟多个-p)
```sh
$ docker run -ti -d --name nginx-test -p 192.168.10.214:7777:80 -p 127.0.0.1:7788:80 docker.io/nginx
```
- 4、通过宿主机的iptables进行nat转发,将宿主机的端口映射到容器的内部端口上
> 这种方式适用于容器启动时没有指定端口映射的情况!
```sh
# 首先获得容器的ip地址
[root@docker-test ~]$ docker inspect my-nginx9|grep IPAddress
# "SecondaryIPAddresses": null,
# "IPAddress": "172.17.0.9",
[root@docker-test ~]$ ping 172.17.0.9
[root@docker-test ~]$ telnet 172.17.0.9 80
# 将容器的80端口映射到docker主机的8080端口
[root@docker-test ~]$ iptables -t nat -A DOCKER -p tcp --dport 8080 -j DNAT --to-destination 172.17.0.9:80
```
- 5、提交一个运行中的容器为镜像,运行镜像并添加端口
```sh
$ docker commit -m="描述信息" -a="镜像作者" <容器 ID> <创建的目标镜像名>
$ docker run -itd -p 8000:80 <新的镜像> /bin/bash
```