陈拓 2024/10/19-2024/12/26
0. 概述
docker是容器(Container),有点像一个轻量级的虚拟机。
容器是一种轻量级、可移植、并将应用程序进行的打包的技术,使应用程序可以在几乎任何地方以相同的方式运行。Docker将镜像文件运行起来后,产生的对象就是容器。容器相当于是镜像运行起来的一个实例。容器具备一定的生命周期。另外,可以借助docker ps命令查看运行的容器,如同在linux上利用ps命令查看运行着的进程那样。
Docker的使用步骤:
- 首先安装Docker管理系统
安装Docker通常包括添加Docker的官方软件包源(GPG密钥),安装Docker引擎,以及启动Docker服务。这些步骤确保了你的系统可以安装和运行Docker容器。
- 获取或构建应用程序的Docker镜像
你可以从Docker Hub或其他容器镜像仓库获取现成的镜像,或者根据自己的需求构建自定义的Docker镜像。
- 通过docker run命令运行镜像,启动容器
- 容器之间相互隔离
Docker通过Linux内核的命名空间(namespaces)和控制组(cgroups)技术实现隔离和资源限制。
每个容器都有自己的文件系统、网络接口和资源限制,因此它们之间是相互隔离的。这种隔离确保了应用程序的安全性和稳定性。
1. 官方网址
https://www.docker.com/
2. 我的系统信息
lsb_release -a
需要升级系统可以参考《ssh远程升级Ubuntu20.04到Ubuntu 22.04》
https://blog.csdn.net/chentuo2000/article/details/144306625?spm=1001.2014.3001.5502
3. 安装步骤
3.1 更新软件包索引
sudo apt update
3.2 安装必要的软件包,以允许apt通过HTTPS使用仓库
sudo apt install ca-certificates curl gnupg lsb-release
然后安装apt-transport-https
和ca-certificates
软件包,这些是用于添加Docker的官方GPG密钥和软件源的:
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
3.3 添加Docker的官方GPG密钥
安装Docker时添加官方GPG密钥的主要目的是为了确保安装的软件源是正确的,以及验证软件包的完整性和真实性。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3.4 添加Docker软件源
Docker作为一个独立的项目,并不包含在Ubuntu或其他Linux发行版的官方APT源中。
因此,为了安装最新或者特定版本的Docker,你需要添加Docker的官方软件源到你的系统中。这样做可以确保你能够访问到Docker的最新版本和更新,同时也能够确保你安装的Docker版本是经过官方签名和验证的,从而保证了软件的安全性和可靠性。通过添加Docker的官方GPG密钥,你还可以确保软件包在下载和安装过程中没有被篡改。
添加Docker的官方软件源到你的系统:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3.5 更新软件包索引
sudo apt-get update
3.6 安装Docker CE/EE
安装Docker CE(社区版)或Docker EE(企业版),下面安装CE版:
sudo apt-get install docker-ce docker-ce-cli containerd.io
查看版本:
docker -v
- 查看Docker服务的状态
Docker服务在每次系统重启后会自动启动。可以用下面的命令查看Docker服务的状态:
sudo systemctl status docker
q退出。
3.7 运行测试
3.7.1 配置Docker使用国内镜像源
- 编辑/etc/docker/daemon.json文件(如果该文件不存在,可以创建它)
sudo nano /etc/docker/daemon.json
在文件中添加以下内容,以配置使用国内的Docker镜像源,例如阿里云的镜像源:
{
"registry-mirrors": ["https://docker-proxy.741001.xyz","https://registry.docker-cn.com"]
}
镜像源提供:
[https://blog.csdn.net/weixin_46028606/article/details/142663559]
- 重启Docker服务
修改配置文件后,需要重启Docker服务以使更改生效:
sudo systemctl restart docker
sudo systemctl daemon-reload
- 查看Docker服务的状态
sudo systemctl status docker
- 验证配置
重启Docker服务后,你可以运行以下命令来验证是否已经注册了新的镜像源:
docker info
3.7.2 从Docker仓库拉取hello-world镜像
sudo docker pull hello-world
- 运行hello-world镜像
sudo docker run hello-world
Hello from Docker!
- 查看本地已有的镜像列表
docker images
3.7.3 删除本地的Docker镜像
docker rmi <镜像 ID>
或者
docker rmi <镜像名称>:<标签>
强制删除镜像:
如果某个镜像正在被使用或者有其他依赖关系,可能无法直接删除。这时可以使用 -f(或 --force)参数强制删除:
docker rmi -f <镜像 ID> 或 docker rmi -f <镜像名称>:<标签>
注意事项:
在删除镜像之前,确保该镜像没有被正在运行的容器所使用,否则可能会导致容器无法正常运行。
谨慎删除镜像,尤其是重要的生产环境镜像,以免造成数据丢失或应用程序无法正常运行。
3.8 让非root用户也能运行Docker命令
如果你想让非root用户也能运行Docker命令,你可以将该用户添加到docker组,下面将当前用户添加到docker组:
sudo usermod -aG docker $USER
重新登录以使更改生效,或者在当前终端中运行以下命令使更改立即生效:
newgrp docker
这样我们就可以不用sudo直接运行docker了:
docker container run hello-world
3.9 查看Docker中已经在运行的容器
docker ps -a
注意:Docker安装完成时是没有容器的,而当前却有两个容器存在,是因为我们在前面成功运行了两次hello-world容器,所以现在有两个容器,可以看到两个容器都是依赖的同一个hello-world镜像。
3.10 删除容器
- 停止正在运行的容器
使用docker stop命令来停止容器。可以使用容器 ID 或者容器名称作为参数。例如使用容器 ID:
docker stop 5bc70f020c0a
docker stop命令会向容器的主进程发送一个SIGTERM信号,给容器内的进程一定时间(默认是 10 秒)来优雅地关闭。如果进程没有在规定时间内关闭,docker会发送一个SIGKILL信号来强制关闭容器。
- 删除已停止的容器
docker container rm 容器名或容器id,例如:
docker container rm 5bc70f020c0a
此时再使用以下命令查看已有容器时,就只有一个容器了,结果如下图所示。
docker ps -a
注意事项:
如果容器正在运行,直接使用docker rm命令删除容器会报错。所以一定要先停止容器再删除。不过,也可以使用docker rm -f命令来强制删除正在运行的容器,但这种方式比较粗暴,可能会导致容器内的数据丢失或者未保存的工作丢失等问题。
4. 容器启动策略
Docker容器在系统重启后是否需要手动启动取决于容器的启动策略。默认情况下,Docker容器在系统重启后是不会自动启动的。这是因为Docker遵循一种“非侵入式”的设计理念,它不会对宿主机的启动流程进行过多的干预。
4.1 重启选项
Docker提供了一些启动策略选项来改变这种情况。例如,可以使用--restart选项来配置容器的重启策略。这个选项有不同的值可以设置,如no(默认值)、always、on - failure和unless - stopped。
- always
如果将容器的启动策略设置为always,那么无论容器是因为什么原因退出的,在系统重启后它都会自动启动。这对于一些需要持续运行的服务容器非常有用,比如一个Web服务器容器或者数据库容器。例如,如果你有一个运行着Nginx的容器,并且希望它在系统重启后能马上恢复服务,就可以将其启动策略设置为always。
- on – failure
当设置为on - failure时,容器只有在因为非零退出码(表示容器运行出错)而退出的情况下,才会在系统重启后自动启动。这个策略比较适合那些可能会因为某些错误而偶尔退出的容器,这样可以让容器有机会在系统重启后重新尝试运行,修复之前的错误。
- unless – stopped
这种策略下,容器在系统重启后会自动启动,除非它在系统重启之前是处于停止状态的。也就是说,如果容器在系统重启前是运行中的,那么它会自动重启;如果是已经停止的,就不会自动启动。
4.2 配置方法示例
- 新创建的容器
当你使用docker run命令创建一个新容器时,可以通过添加--restart选项来设置启动策略。例如:
docker run -d --restart=always my - image:latest
上面的命令会创建一个后台运行(-d)的容器,并且这个容器的启动策略是always,使用的镜像是my - image:latest。
- 已经创建好的容器
如果是已经创建好的容器,你可以使用docker update命令来修改容器的启动策略,例如:
docker update --restart=on - failure:3 container - name
这条命令会将名为container - name的容器的启动策略修改为on - failure,并且在容器因为非零退出码退出时,最多尝试重启3次。
要进入正在运行的Docker容器,可以使用docker exec命令。这里有几种常用的方法:
使用bash shell(假设容器内部有bash):
docker exec -it <container_id_or_name> /bin/bash
docker exec -it c43d69f6884d /bin/bash
其中:
-it是两个参数的组合
-i 选项表示在容器中打开一个交互式会话。
-t 选项表示为会话分配一个伪tty。
--rm参数是用来在容器退出之后自动删除容器的。这个参数可以在docker run命令中使
参考文档
- Ubuntu22.04安装Docker并搭建ros2环境
https://blog.csdn.net/Songqiang777/article/details/132686455