简介:本文章记录在ubuntu上安装docker全过程,及遇到的问题,解决方案、常用操作等,不废话,直击重点
在 Ubuntu 上安装 Docker
安装Docker
我们将会启用 Docker 软件源,导入 GPG key,并且安装软件包 ,需使用root权限 :sudo。
1、首先,更新软件包索引,并且安装必要的依赖软件,来添加一个新的 HTTPS 软件源:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
2、使用下面的 curl
导入源仓库的GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
3、将 Docker APT 软件源添加到你的系统:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
4、安装Docker最新版:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
5、安装完成,Docker 服务将会自动启动。你可以输入下面的命令,验证它:
sudo systemctl status docker
6、默认情况下,只有root用户和docker组的用户才能运行Docker命令。我们可以将当前用户添加到docker组,以避免每次使用Docker时都需要使用sudo。命令如下:
(注:重新登录才能使更改生效。)
sudo usermod -aG docker $USER
阻止Docher 版本自动更新
如果你想阻止 Docker 自动更新,锁住它的版本:
sudo apt-mark hold docker-ce
阿里云镜像加速器的配置
拉取 hub.docker.com 的镜像,会发现速度很慢,是因为有墙。可以配置阿里云镜像加速器。
修改Docker配置文件。对于系统系统为Ubuntu 16.04+、Debian 8+、CentOS 7、Fedora 24+、RedHat 7+等,可修改/etc/docker/daemon.json文件(可能不存在)
登录阿里云控制台,搜索:容器镜像服务->镜像工具->镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://750xi8h6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像拉取测试及遇到问题解决:
Docker Hub是一个云端服务,主要用来储存 公有和私有源中的 Docker 镜像。默认情况下, Docker可以从 从 Docker Hub 拉取镜像。想要验证当前用户权限,你可以执行docker
命令,前面不需要加`sudo, 我们将会运行一个测试容器:
运行个docker的hello-word,执行docker命令如下:
docker container run hello-world
可能会出现以下错误:docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
解决方式
在 /etc/docker/daemon.json 里追加镜像拉取地址:“https://docker.yccp.site"
如下:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://750xi8h6.mirror.aliyuncs.com","https://docker.yccp.site"]
}
EOF
#重新加载,重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
拉取成功
卸载 Docker
在卸载 Docker 之前,你最好 移除所有的容器,镜像,卷和网络。
运行下面的命令停止所有正在运行的容器,并且移除所有的 docker 对象:
docker container stop $(docker container ls -aq)
docker system prune -a --volumes
现在你可以使用apt
像卸载其他软件包一样来卸载 Docker:
sudo apt purge docker-ce
sudo apt autoremove
删除镜像、容器、配置文件等内容:
sudo rm -rf /var/lib/docker
Docker常用命令 Linux
查看
#查看所有镜像
docker images (该命令会列出已经下载到本地系统中的所有镜像,包括镜像名称、版本号(标签)、镜像ID、创建时间和大小等信息。)
#查看所有容器
docker ps
停止容器
#停止docker服务
sudo systemctl stop docker (这个命令会停止Docker服务,并且释放所有占用的资源。在运行这个命令时,需要确保有足够的权限,否则会报错。)
#停止所有运行的容器
docker stop $(docker ps -q)
#停止单个容器
docker stop <container_id_or_name>
#停止所有在docker-compose.yml文件中定义的服务
docker-compose stop
#停止指定名称的服务
docker-compose stop <service_name>
删除镜像
1、删除指定镜像
使用 docker rmi
命令加上镜像的名称或ID来删除单个镜像。例如,要删除名为 my_image
(id:c3f279d17e0a)的镜像,可以运行:
docker rmi my_image
或者
docker rmi c3f279d17e0a
2、强制删除
如果镜像正在被一个或多个容器使用,Docker 默认不允许删除该镜像。此时,可以添加 -f
或 --force
选项来强制删除镜像,即使有容器正在使用它
docker rmi -f my_image
3、删除多个镜像(同样,如果需要强制删除这些镜像,可以添加 -f
选项。)
docker rmi image1 image2 image3
4、删除所有未使用的镜像
使用 docker image prune
命令可以删除所有没有被任何容器使用的镜像。这是一个相对安全的操作,因为它不会删除正在被使用的镜像。 (注意:该命令会提示你确认是否删除,你可以输入 y
来确认。)
docker image prune
5、删除所有镜像(包括正在使用的)
如果你确实需要删除所有镜像,包括那些正在被使用的镜像,可以使用以下命令组合:
docker rmi $(docker images -q)
这里,docker images -q
命令会列出所有镜像的ID(不带其他信息),然后通过管道传递给 docker rmi
命令进行删除。但请注意,这是一个不可逆的操作,应谨慎使用。
注意事项
在删除镜像之前,请确保该镜像不再需要,避免误删系统必需的镜像。
如果镜像正在被容器使用,你需要先停止并删除这些容器,或者强制删除镜像(使用 -f 选项)。
docker image rm 命令和 docker rmi 命令是等价的,都可以用来删除镜像。
删除镜像只会影响本地环境,不会影响远程仓库中的镜像。如果需要从远程仓库中删除镜像,则需要使用远程仓库提供的相应命令或操作界面。
Docker-compose 多容器冲突解决方法
问题分析:
项目名称冲突:不同项目的 Docker Compose 文件未指定独立的项目名称,导致 Docker 自动生成的项目名称相同,从而在启动时将一个项目的 Redis 容器(举例)替换为另一个项目的Redis容器。
端口冲突:两个 Redis 容器尝试绑定相同的端口(如 6379),引发了端口占用问题,导致其中一个容器无法正常启动。
网络配置冲突:两个项目的 Redis 容器连接到同一个 Docker 网络,导致资源冲突和容器替换。
解决方法:
为每个项目设置唯一的 Docker Compose 项目名称: 使用 -p
参数为每个项目指定独特的 Docker Compose 项目名称,确保容器和网络资源相互独立:
docker compose -f docker-compose.yml -p xxx up -d
运行的容器内执行命令 docker exec 命令:
举例 eg:
docker exec -it ollama ollama list
docker exec 是用来在一个已经运行的容器内执行命令的。它允许你在容器内部启动一个新的进程,通常用于调试和管理。
it 选项:
i(interactive): 使容器的标准输入保持打开,以便你可以与容器内的进程进行交互。
t(tty): 为容器分配一个伪终端,这使得你可以以终端模式运行命令。
ollama:这是正在运行的容器的名称。
ollama list:这是在容器内执行的命令。它调用了 ollama 应用程序,查看当前ollama正在运行的大模型列表