docker基本操作命令
docker pull <镜像名:tag>
# 例如以下代码
docker pull sameersbn/redmine:latest
docker rm <container_name or container_id>
docker logs -f <container_name or container_id>
# 查看所有的运行中的容器进程
docker ps
docker ps -a # 包括已经停止的
# 删除所有容器
docker rm $(docker ps -a -q)
# 停止、启动、杀死指定容器
docker start <容器名 or ID> # 启动容器
docker stop <容器名 or ID> # 启动容器
docker kill <容器名 or ID> # 杀死容器
# 后台运行
docker run -d <Other Parameters>
# 例如
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
#端口映射
# 3种方式
docker -p ip:hostPort:containerPort # 映射指定地址的主机端口到容器端口
# 例如:docker -p 127.0.0.1:3306:3306 映射本机3306端口到容器的3306端口
docker -p ip::containerPort # 映射指定地址的任意可用端口到容器端口
# 例如:docker -p 127.0.0.1::3306 映射本机的随机可用端口到容器3306端口
docer -p hostPort:containerPort # 映射本机的指定端口到容器的指定端口
# 例如:docker -p 3306:3306 # 映射本机的3306端口到容器的3306端口
# 这里/home/data 指的是宿主机的目录地址,后者则是容器的目录地址
docker -v /home/data:/opt/data
# 停止所有容器
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
# 删除所有容器
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
# 删除所有none镜像
docker images|grep none|awk '{print $3 }'|xargs docker rmi
# 列举镜像
docker image ls --format "{{.ID}}: {{.Repository}}"
docker image rm centos
docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxxxxx)
docker运行镜像
# 运行mysql并初始化参数
$ docker run -d -i -p 3306:3306 --name=mysql --restart=always -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# 默认nginx:last
$ docker run --name webserver -p 80:80 -d nginx
# docker 进程
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
215a92d4780a nginx "nginx -g 'daemon of…" 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp webserverDemo
进入容器修改容器内容
docker exec -it webserver bash
root@3729b97e8226:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
root@3729b97e8226:/# exit
提交新的分层镜像
除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。
docker commit \
--author "wachoo <wachoo@gmail.com>" \
--message "update default index.html" \
webserver \
nginx:v2
# 查看新的镜像资源
docker images -a
# 查看镜像 关联的父镜像
docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=xxxxxx)
image备份
# 备份container_id
docker commit -m "commit content" -a "author_name" 136e6e580929 xxx-backup:v1
# 把image打成tar包
docker save -o ./xxx-backup.tar xxx-backup
# 加载恢复
docker load -i ~/xxx-backup.tar
运行新的nginx:v2镜像
docker run --name web2 -d -p 81:80 nginx:v2
查看镜像内的历史记录
docker history nginx:v2
aliyun镜像加速
进入阿里云控制台查找 “容器镜像服务”,进入后找到“镜像加速器”,复制地址即可
在安装后的docker设置中填写以上地址,如下:
容器互联
使用--link参数可以让容器之间安全地进行交互。
--link参数格式是--link name:alias,其中name是要链接容器的名称,alias是这个连接的别名。
比如我们先创建一个新的数据库容器:
docker run -d --name db training/postgres
复制代码
然后再创建一个web容器,并将它连接到db容器:
docker run -d -p --name web --link db:db training/webapp python app.py
复制代码
这个时候db容器就与web容器可以互相通信了。可以使用docker ps来查看容器的连接。
使用--link参数可以让Docker在两个容器之间通过一个安全的隧道互相通信,而不用通过开放端口的方式来实现,避免了把端口暴露到外部网络上。
查看公开容器的接连信息
- 环境变量:使用env命令来查看容器的环境变量
docker run --name web --link db:db training/webapp env
复制代码
- /etc/hosts文件:使用link参数时,Docker会添加host信息到父容器的/etc/hosts的文件。下面是父容器web的hosts文件
docker run -t -i --link db:db training/webapp /bin/bash
root@aed84ee21bd3:/opt/webapp# cat /etc/hosts
127.17.0.7 aed84ee21bde
...
172.17.0.5 db
复制代码
第一个是web容器的host信息,默认用自己的id为主机名。第二个是db容器的ip和主机名