概念 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用,是镜像运行时的实体。 |
Docker 客户端(Client) | Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。 |
Docker 主机(Host) | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。 Docker Hub( https://hub.docker.com ) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository); 每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。 我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。 如果不给出标签,将以 latest 作为默认标签。 |
Docker Machine | Docker Machine是一个简化Docker安装的命令行工具, 通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
# 这个使用不方便,没有版本,建议直接Docker Hub搜索需要的镜像
docker search xxxx
docker pull 镜像名[:标签名]
docker images
docker image ls
docker rmi 镜像名:标签名
docker rmi 镜像ID
docker image rm 镜像名:标签名
docker image rm 镜像ID
# 容器名称(--name 容器名称)
# 端口映射(-p 容器端口:宿主机端口)
# 将容器内部使用的网络端口随机映射到我们使用的主机上(-P)
# 目录映射(-v 宿主机路径:容器路径)(自动创建卷的方式,-v 卷名称:容器路径)
# 额外参数(-e 参数名:参数值)
# 配置网络(--network 网络名称),默认bridge
# 容器开机启动(--restart=always)
# 后台运行(-d)
# 允许你对容器内的标准输入进行交互(-i)
# 在新容器内指定一个伪终端或终端(-t)
# -itd可以一起使用
docker run -p 3306:3306 --name home-mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.37
docker tag 源镜像名称[:TAG] 目标镜像名[:TAG]
docker image tag 源镜像名称[:TAG] 目标镜像名[:TAG]
# 创建自定义镜像
# 方式一:通过容器生成,见容器操作命令,导入容器为镜像章节
# 方式二:通过Dockerfile生成。后面章节说明
docker image --help
# 创建卷
# 卷驱动,默认local(-d / --driver local)
# 卷元数据(--label 元数据)
# 卷元数据(-o / --opt map[])
docker volume create 卷名称
docker volume create --driver fake 卷名称
docker volume create --label tardis=blue 卷名称
docker volume create --opt tardis=blue --opt timey=wimey 卷名称# 列出当前所有卷
docker volume ls# 删除卷
docker volume rm 卷名称# 查看卷详情
docker volume inspect 卷名称# 更多卷命令请通过--help查看
docker volume --help
创建好的卷,在运行容器时可以直接使用,-v 卷名称:容器路径
# 创建网络
# 默认bridge网络
docker network create 网络名称
docker network create -d bridge 网络名称
# 还有很多参数,暂时忽略...# 列出当前所有网络
docker network ls# 删除网络
docker network rm 网络名称# 删除所有未使用的网络
docker network prune# 查看网络详情
docker network inspect 网络名称# 将一个容器连接到网络(追加,如果想单独用某一个网络,则在docker run时指定网络)
docker network connect 网络名称 容器名# 将一个容器取消连接到网络
docker network disconnect 网络名称 容器名# 更多网络命令请通过--help查看
docker network --help
# 查看所有容器
docker ps -a
docker container ps -a# 查看运行中的容器
docker ps
docker container ps
docker stop 容器ID
docker container stop 容器ID
docker start 容器ID
docker container start 容器ID
docker restart 容器ID
docker container restart 容器ID
# 方式一:进入容器
docker attach 容器ID
docker container attach 容器ID
# 方式二:进入容器,推荐使用 docker exec 命令,因为此命令会退出容器终端,但不会导致容器的停止
docker exec -it 容器ID /bin/bash
docker container exec -it 容器ID /bin/bash# 退出容器
exit
docker export 容器ID > 名称.tar
docker container export 容器ID > 名称.tar
docker import 名称.tar 镜像名:TAG名
docker rm -f 容器ID
docker port 容器ID
docker container port 容器ID
docker logs 容器ID
docker container logs 容器ID
docker inspect 容器ID
docker container inspect 容器ID
# 启动时添加--restart=always
# no 不自动重启容器. (默认value)
# on-failure 容器发生error而退出(容器退出状态不为0)重启容器
# unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
# always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
docker run --restart=always 镜像名:标签# 已启动的容器更新
docker update --restart=always 容器ID
docker container --help
# 登录docker hub
docker login
# 退出docker hub
docker logout
# 这个使用不方便,没有版本,建议直接Docker Hub搜索需要的镜像
docker search xxxx
docker pull 镜像名[:标签名]
# 用户登录后
docker push 镜像名[:标签名]
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS,配置完,需要重启 docker 才能生效。
{"dns" : ["114.114.114.114","8.8.8.8"]
}
如果只想在指定的容器设置 DNS,则可以使用以下命令:
# --rm:容器退出时自动清理容器内部的文件系统。
# -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。
# --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
# --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
docker run -it --rm -h 主机名 --dns=114.114.114.114 --dns-search=test.com 镜像ID