记录一些常用的 Docker 指令。

镜像

# 查看目前有的镜像
$ docker images

# 下载镜像 docker pull NAME[:tag], 例如:
$ docker pull cassandra:latest

# 删除镜像
$ docker rmi NAME

容器 - 运行指令

# 查看目前有的容器
$ docker ps -a

# 运行新的容器,基于ubuntu镜像,并进入容器的 bash 指令操作
$ docker run -it --name my_ubuntu ubuntu /bin/bash

# 启动容器
$ docker start -i my_ubuntu

# 重新连上容器的 TTY
$ docker attach my_ubuntu

# 删除容器 (若有使用 data volume 则需记得加上 -v)
$ docker rm -v my_ubuntu

容器 - 运行服务

# 运行镜像 jenkins, 容器名称为 jenkins-sys
# 加载 data volume: jenkins-dv
# 在背景运行: -d
# 将 host的9090端口 对应 container的8080端口。host的30000端口 对应 container的50000端口
$ docker run -d -p 9090:8080 -p 30000:50000 --volumes-from jenkins-dv --name jenkins-sys jenkins

# 若是使用 boot2docker, 还需要再设定 VBoxManage 的 port forwarding 才能访问到 docker容器的 服务端口,参见下面 网络部分。

容器 - Data Volume

# 新建一个 data volume container
# 基于 jenkins镜像, 加载后会是在 对象容器的 /var/jenkins_home 路径
$ docker create -v /var/jenkins_home --name jenkins-dv jenkins

# 备份 Data Volume:jenkins-dv 的内容到 本地 mybackup-ymd.tar.gz
# 下面命令新建一个 container (基于ubuntu镜像), 加载 Data Volume:jenkins-dv 以及 本地当前路径pwd于容器中的/backup/, 
# 然后在容器中运行 tar czvf 备份 /var/jenkins_home 的内容到 tar.gz 文件。
$ docker run --volumes-from jenkins-dv -v $(pwd):/backup ubuntu tar czvf /backup/mybackup-ymd.tar.gz /var/jenkins_home

网络 - boot2docker (Mac & Windows) DEPRECIATED!!! 已经被 docker toolbox 取代

使用 Mac 或 Windows 的 boot2docker 时,想要访问容器提供的服务端口还需要进行 boot2docker 的网络设定,进行本机端口与boot2docker VirtualBox虚拟机的端口绑定。做法有两种:临时的SSH Tunnel, 以及 VBoxManage网络永久 NAT port forwarding 设定。参考 [VirtualBox 设定文档] (https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm)

# 建立临时 SSH Tunnel
# -N (不建立 shell), -f (连线后于背景运行), -L 9000:dist_server:1234 (将本机9000端口引导到目标机器的1234端口), 例如:
$ boot2docker ssh -vnNTL 9090:0.0.0.0:1234

# 使用 VBoxManage 进行网络设定,永久绑定
# 查看目前的 VirtualBox 虚拟机列表,找到docker host 的虚拟机名: boot2docker-vm
$ VBoxManage list -l vms
# 将 boot2docker-vm 的 NAT 设定 9090 端口绑定
# --natpf<1-N> [<name>],tcp|udp,[<hostip>],<hostport>,[<guestip>], <guestport>

# 1. 先将 boot2docker 停止
$ boot2docker stop
# 2. 进行 NAT Port Forwarding 的设定
$ VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port9090,tcp,,9090,,9090";
# 3. 完成设定后,将 boot2docker 启动
$ boot2docker start
# 4. 看看 port forwarding 的设定是否已经加上。
$ VBoxManage list -l vms
...
NIC 1 Rule(0):   name = tcp-port9090, protocol = tcp, host ip = , host port = 9090, guest ip = , guest port = 9090
...

# 如果要移除掉新增的 port forwarding rule:
$ VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "tcp-port9090"