速通Docker === 使用最佳实践总结
目录
主要使用步骤
1. 命令
2. 网络
3. 存储
卷存储(Volumes)
目录挂载(Bind Mounts)
比较
4. 环境变量
5. 端口
示例:启动 MySQL 容器
解释:
总结
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
主要使用步骤
根据提供的图和命令示例,我们可以总结出 Docker 的主要使用步骤如下:
1. 命令
Docker 的操作主要通过命令行工具进行。常用的命令包括 docker run
(运行容器)、docker stop
(停止容器)、docker start
(启动容器)、docker rm
(删除容器)等。
docker pull IMAGE
:从镜像仓库中拉取或更新镜像。docker push IMAGE
:将镜像推送到镜像仓库。docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
:运行一个新的容器。docker stop CONTAINER
:停止一个或多个正在运行的容器。docker start CONTAINER
:启动一个或多个已经被停止的容器。docker restart CONTAINER
:重启容器。docker rm CONTAINER
:删除一个或多个容器。docker rmi IMAGE
:删除一个或多个镜像。docker ps
:列出当前所有正在运行的容器。docker logs CONTAINER
:获取容器的日志。
2. 网络
Docker 容器可以配置网络,以便容器之间或容器与外部世界进行通信。网络配置可以通过 docker network
命令进行管理。
docker network ls
:列出所有网络。docker network create NETWORK
:创建一个新网络。docker network inspect NETWORK
:查看网络的详细信息。docker network connect NETWORK CONTAINER
:将容器连接到网络。docker network disconnect NETWORK CONTAINER
:将容器从网络中断开。
3. 存储
Docker 容器的数据持久化通过卷(Volumes)实现。卷可以挂载到容器中,用于存储数据。例如,使用 -v
参数将宿主机的目录挂载到容器中。
目录挂载是将宿主机上的目录直接挂载到容器内。这种方式使得容器可以访问宿主机上的文件和目录,但这种方式不如卷存储安全,因为宿主机的文件系统直接暴露给了容器。
区分目录挂载和卷映射,可通过挂载的路径中是否包含 / 或者 ./来判断
卷存储(Volumes)
Docker 卷是 Docker 管理的数据存储机制,它们独立于容器的生命周期,即使容器被删除,卷中的数据也不会丢失。卷可以被多个容器挂载,非常适合用于持久化数据。
创建和使用卷的命令:
docker volume create VOLUME_NAME
:创建一个新的 Docker 卷。docker volume ls
:列出所有 Docker 卷。docker volume inspect VOLUME_NAME
:查看卷的详细信息。docker volume rm VOLUME_NAME
:删除一个 Docker 卷。
使用卷的示例命令:
docker run -d \
-v mydata:/path/in/container \
myimage
这里,mydata
是 Docker 卷的名称,/path/in/container
是容器内挂载卷的路径。
目录挂载(Bind Mounts)
目录挂载是将宿主机上的目录直接挂载到容器内。这种方式使得容器可以访问宿主机上的文件和目录,但这种方式不如卷存储安全,因为宿主机的文件系统直接暴露给了容器。
使用目录挂载的示例命令:
docker run -d \
-v /host/path:/path/in/container \
myimage
这里,/host/path
是宿主机上的目录路径,/path/in/container
是容器内挂载目录的路径。
比较
-
持久性:卷存储和目录挂载都可以实现数据的持久化,但卷存储更安全,因为它是 Docker 管理的。
-
共享性:卷可以被多个容器挂载,而目录挂载通常只用于单个容器。
-
性能:目录挂载可能提供更好的性能,因为它直接使用宿主机的文件系统,但这也取决于具体的使用场景。
4. 环境变量
环境变量用于在容器启动时传递配置信息。例如,使用 -e
参数设置环境变量。
-e KEY=VALUE
或--env KEY=VALUE
:设置环境变量。-e KEY
或--env KEY
:设置环境变量,值从宿主机环境变量中获取。
5. 端口
端口映射允许容器内的服务通过宿主机的端口访问。例如,使用 -p
参数将容器的端口映射到宿主机的端口。
-p 宿主机端口:容器端口
或--publish 宿主机端口:容器端口
:映射端口。-p 容器端口
或--publish 容器端口
:让 Docker 自动在宿主机上选择端口。
示例:启动 MySQL 容器
以下是一个启动 MySQL 容器的示例命令:
docker run -d -p 3306:3306 \
-v /home/docker/mysql/config:/etc/mysql/conf.d \
-v /home/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=shiguang \
--name mysql \
mysql:8.0.37-debian
解释:
-
-d
:后台运行容器。 -
-p 3306:3306
:将宿主机的 3306 端口映射到容器的 3306 端口。 -
-v /home/docker/mysql/config:/etc/mysql/conf.d
:将宿主机的/home/docker/mysql/config
目录挂载到容器的/etc/mysql/conf.d
目录,用于配置 MySQL。 -
-v /home/docker/mysql/data:/var/lib/mysql
:将宿主机的/home/docker/mysql/data
目录挂载到容器的/var/lib/mysql
目录,用于存储 MySQL 数据。 -
-e MYSQL_ROOT_PASSWORD=shiguang
:设置环境变量MYSQL_ROOT_PASSWORD
,用于设置 MySQL 的 root 用户密码。 -
--name mysql
:为容器指定名称mysql
。 -
mysql:8.0.37-debian
:指定要运行的镜像,这里是 MySQL 8.0.37 的 Debian 版本。
总结
通过以上步骤和示例,我们可以看到 Docker 的使用主要包括命令操作、网络配置、存储管理、环境变量设置和端口映射。这些步骤确保了容器的可移植性、安全性和灵活性。Docker 的最佳实践还包括使用官方镜像、定期更新镜像、合理配置资源限制等,以确保容器的稳定运行和资源的高效利用。