获取镜像
docker pull ubuntu
运行命令:(run)
docker run ubuntu:15.10 /bin/echo "Hello world"
让 docker 运行的容器实现"对话"的能力: (-i -t)
runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
退出容器:
exit
启动容器(后台模式 -d)
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
确认容器有在运行
docker ps 或 docker ps -a
容器内的标准输出
docker logs <CONTAINER ID | NAMES>
停止容器
docker stop <CONTAINER ID | NAMES>
通过 docker ps 查看,容器已经停止工作
启动或重启已停止运行的容器
docker start | restart <CONTAINER ID | NAMES>
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach <CONTAINER ID | NAMES>
注意: 如果从这个容器退出,会导致容器的停止
docker exec -it <CONTAINER ID | NAMES> /bin/bash
注意: 如果从这个容器退出,容器不会停止
删除容器
docker rm -f 1e560fca3906
# 清理掉所有处于终止状态的容器
docker container prune
导出容器
docker export 1e560fca3906 > ubuntu.tar
导入容器
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
也可以通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo
实操:WEB 应用容器
# 拉取镜像
docker pull training/webapp
# -P:将容器内部使用的网络端口随机映射到我们使用的主机上
docker run -d -P training/webapp python app.py
或
docker run -d -p 5000:5000 training/webapp python app.py
# 查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号
docker port bf08b7f2cd89
# -f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出
docker logs -f bf08b7f2cd89
# 使用 docker top 来查看容器内部运行的进程
docker top wizardly_chandrasekhar
# 使用 docker inspect 来查看 Docker 的底层信息
# 它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
docker inspect wizardly_chandrasekhar
# 停止容器
docker stop wizardly_chandrasekhar
# 重启容器
docker start wizardly_chandrasekhar
# docker ps -l 查询最后一次创建的容器
docker ps -l
# 正在运行的容器,我们可以使用 docker restart 命令来重启
docker restart wizardly_chandrasekhar
# 我们可以使用 docker rm 命令来删除不需要的容器
docker rm wizardly_chandrasekhar
删除容器时,容器必须是停止状态,否则会报如下错误
Error response from daemon: You cannot remove a running container
bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container
before attempting removal or force remove
网络端口映射
我们可以指定容器绑定的网络地址,比如绑定 127.0.0.1
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
Docker 容器互联
容器命名
当我们创建一个容器的时候,docker 会自动对它进行命名。另外,我们也可以使用 --name 标识来命名容器
docker run -d -P --name runoob training/webapp python app.py
新建网络
docker network create -d bridge test-net
# 查看一下新建网络
docker network ls
连接容器
# 运行一个容器并连接到新建的 test-net 网络:
docker run -itd --name test1 --network test-net ubuntu /bin/bash
# 打开新的终端,再运行一个容器并加入到 test-net 网络:
docker run -itd --name test2 --network test-net ubuntu /bin/bash
下面通过 ping 来证明 test1 容器和 test2 容器建立了互联关系。
如果 test1、test2 容器内中无 ping 命令,则在容器内执行以下命令安装 ping(即学即用:可以在一个容器里安装好,提交容器到镜像,在以新的镜像重新运行以上俩个容器)。
apt-get update
apt install iputils-ping
在 test1 容器输入以下命令:
在 test2 容器输入以下命令:
这样,test1 容器和 test2 容器建立了互联关系。
如果你有多个容器之间需要互相连接,推荐使用 Docker Compose
配置 DNS
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
配置完,需要重启 docker 才能生效。
查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息:
# --rm:容器退出时自动清理容器内部的文件系统。
docker run -it --rm ubuntu cat etc/resolv.conf
手动指定容器的配置
如果只想在指定的容器设置 DNS,则可以使用以下命令
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu