Docker作用
Docker是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台,可以让开发者以便捷方式打包应用到一个可移植的容器中,然后安装至任何运行Linux或Windows等系统的服务器上。 相较于传统虚拟机,Docker容器提供轻量化的虚拟化方式、安装便捷、启停速度快。
Docker部署方便,而且移除方便,不用担心影响服务器环境,这就是我选择它的原因。
安装Docker
详细步骤参见Docker官方文档,这里将通过apt安装的方式摘录如下:
(非必须)卸载非官方软件包:
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
导入GPG密钥:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
安装apt存储库:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update
安装最新版本:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
自此,Docker就已经安装完成。
Docker的使用技巧
Docker常用命令
docker ps -a //查看所有容器(包括已停止容器)
docker exec -it [dockername] bash //进入容器执行命令(输入exit退出,同时不结束容器运行)
docker image list //查看所有镜像
docker rm -f [dockername] //删除容器
docker run -p [外端口]:[内端口] -v [外路径]:[内路径] --name=xx --restart=xx //启动参数
Docker容器的重启策略
- no 在容器退出时不重启
- on-failure 在容器非正常退出时重启
- on-failure:3 在容器非正常退出时重启容器,最多重启3次
- always 在容器退出时总是重启
- unless-stopped 在容器退出时总是重启,除了在Docker守护进程启动时就已经停止的容器
Host模式详解
默认Docker容器运行会分配独立的Network Namespace隔离子系统,host模式下,容器和宿主机共用一个Network Namespace,使用宿主机的IP和端口。连接到 host 网络的容器共享 Docker host 的网络栈。可以通过 --network=host
指定使用 host 网络。直接使用 Docker host 的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择 host 网络。当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题。
Docker修改容器内文件
如果不方便采用映射,只是想临时修改某个文件,可以从容器中拷贝目标文件到本地,修改完成后再拷贝回去:docker cp 容器id/容器名:[目标文件路径] [本地路径]
启动的容器添加目录/端口映射
记录容器ID,并停止需要添加映射目录的容器
docker ps
docker stop container_name
进入容器目录,修改容器配置文件
docker info | grep Root
cd /var/lib/docker/containers/containers_id
修改容器的config.v2.json
,在MountPoints
下,添加目录映射配置,如下:
"/file": {
"Source": "/file",
"Destination": "/file",
"Driver": "",
"Name": "",
"Propagation": "rprivate",
"RW": true,
"Relabel": "ro",
"SkipMountpointCreation": false,
"Spec": {
"Source": "/file",
"Target": "/file",
"Type": "bind"
},
"Type": "bind"
}
修改容器的hostconfig.json
,在Binds
下,添加目录映射配置,如下:
"Binds": [
"/file:/file"
]
最后,重启Docker和容器。注意:要重启docker服务,否则修改的配置文件会被还原
systemctl restart docker
docker start containers_id
修改端口同理,修改config.v2.json
,在ExposedPorts
添加端口;修改hostconfig.json
,在PortBindings
添加端口。
参考资料:
Docker学习笔记四:Docker给已经启动的容器添加目录映射、端口映射