Docker安装
Docker是一个开源平台,它可以帮助开发人员和系统管理员在容器中开发、部署和运行应用程序。容器是一种技术,可以将应用程序和所有其依赖项打包在一起,这样可以确保应用程序在任何环境中都以相同的方式运行。
Docker主要组件和概念
Docker Engine:这是Docker的核心部分,是一个长时间运行的守护进程,负责构建和运行容器。
Docker Image(镜像):是一个轻量级、独立的、可执行的软件包,包含了运行应用程序所需的所有内容:代码、运行时、系统工具、系统库和设置。这确保了应用程序在任何地方都能以相同的方式运行。
Docker Container(容器):是Docker镜像的一个运行时实例。与虚拟机不同,容器不拥有操作系统,而是共享宿主机的OS系统;但它们有自己的文件系统、CPU、内存、进程空间等。
Docker Compose:这是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务,然后使用docker-compose命令来启动和停止服务。
Docker Hub:这是一个为Docker镜像提供的公共注册表服务,用户可以发布自己的镜像或使用其他人公开分享的镜像。
Docker的主要优势
一致性:无论在哪里运行,应用程序的行为都是相同的。
隔离:每个容器都在其自己的环境中运行。
轻量级:容器比传统的虚拟机更加轻量,因为它们共享主机OS而不是运行自己的操作系统。
快速启动:与虚拟机相比,容器可以在几秒钟内启动和停止。
可移植性:容器化的应用程序和其依赖项可以在开发、测试和生产环境之间轻松移动。
安装Docker(Ubuntu、Centos)
Ubuntu
在安装Docker Engine之前,需要卸载所有冲突的软件包
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
在新主机上首次安装Docker Engine之前,需要设置Docker存储库。之后可以从存储库安装和更新Docker。
设置 docker 的apt存储库
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
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
首先添加docker官方GPG密钥
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
将存储库添加到APT源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] 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
安装最新版本Docker或安装指定版本
安装最新版本Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装指定版本
要安装特定版本的 Docker Engine,请首先列出存储库中的可用版本
apt-cache madison docker-ce | awk '{ print $3 }'
选择所需的版本并安装
VERSION_STRING=5:24.0.0-1~ubuntu.22.04~jammy
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
安装完毕后查看docker版本,验证是否成功
docker -v
启动docker服务
systemctl start docker && systemctl enable docker && systemctl status docker
Centos
在安装新版本之前需卸载任何旧版本以及相关的依赖项,卸载Docker时,/var/lib/docker/中存储的映像、容器、卷和网络不会自动删除。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
先将yum包更新到最新
yum update
安装yum-utils包(它提供yum-config-manager实用程序)
yum install -y yum-utils
设置yum存储库
官方
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
阿里云
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装最新版本Docker
开始安装docker
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
安装指定版本
安装特定版本,首先列出存储库中的可用版本
yum list docker-ce --showduplicates | sort -r
选择安装的版本,运行以下命令进行安装,版本名称例如:docker-ce-3:25.0.0-1.el8
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
安装完毕后查看docker版本,验证是否成功
docker -v
启动docker服务
systemctl start docker && systemctl enable docker && systemctl status docker
镜像加速器(可选)
可以修改配置文件/etc/docker/daemon.json使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://yp5fg15q.mirror.aliyuncs.com"]
}
EOF
重启docker服务以及配置开机自启
systemctl daemon-reload
systemctl restart docker && systemctl enable docker && systemctl status docker
卸载Docker
yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
主机上的映像、容器、卷或自定义配置文件不会自动删除。要删除所有映像、容器和卷
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
Docker基本管理
镜像
查看
查看本地镜像文件
docker images
搜索
搜索redis镜像
docker search redis
查看docker镜像版本
docker --version
下载
下载redis镜像
不指定版本
docker pull redis
指定版本
docker pull redis:5.0
删除
删除redis镜像
删除指定ID
docker rmi (IMAGE ID)
删除指定版本
docker rmi:latest
强制删除镜像
docker rmi --force 605c77e624dd
删除所有镜像
docker rmi `docker images -q`
容器
查看
查看目前正在运行的容器
docker ps
查看所有容器
docker ps -a
查看容器信息
docker inspect c2
创建
创建永久运行的容器,并且包含终端,创建完立即进入容器,退出则会关闭容器(/sbin/init)
docker run -it --name=c1 centos:7 /bin/bash
创建不会自动关闭的容器,并且不进入终端,退出不会关闭容器
docker run -id --name=c2 centos:7
进入
进入docker容器
docker exec -it c2 /bin/bash
关闭
关闭容器
docker stop c2
停止
停止所有正在运行的容器
docker stop $(docker ps -aq)
删除
删除容器
docker rm c2
删除所有容器(运行的容器不能删除)
docker rm `docker ps -aq`
停止并且清除所有容器
docker stop $(docker ps -aq) && docker rm `docker ps -aq`
数据卷
创建
创建启动容器时,设置数据卷 -v 宿主机目录:容器内目录
docker run -it --name=c1 -v /root/data:/root/data_container centos7:7 /bin/bash
多目录挂载
docker run -it --name=c2 \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
centos:7
数据卷
多个容器同时挂载在同一个数据卷容器
创建
创建c3数据卷容器
docker run -it --name=c3 -v /volume centos:7 /bin/bash
创建启动c1 c2容器,设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
私有仓库
私有仓库搭建
拉取私有仓库镜像
docker pull registry
启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
修改daemon.json
vim /etc/docker/daemon.json
在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实IP
{"insecure-registries":["私有仓库服务器ip:5000"]}
重启docker 服务
systemctl restart docker
docker start registry
将镜像上传至私有仓库
标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
从私有仓库拉取镜像
拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7
Docker镜像制作
将容器打包成镜像
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称
Docker拓展管理
保持容器在线,不受重启docker服务影响
在docker配置文件中增加参数
vim /etc/docker/daemon.json
"live-restore": true
重启docker服务
systemctl reload docker && systemctl restart docker && systemctl status docker
防止报错NVML问题
在docker配置文件中增加参数
vim /etc/docker/daemon.json
"exec-opts": ["native.cgroupdriver=cgroupfs"]
重启docker服务
systemctl reload docker && systemctl restart docker && systemctl status docker
迁移Docker目录
创建要迁移至的新目录
mkdir /docker
将原docker数据迁移至新目录中
rsync -avP /var/lib/docker/ /docker
在docker配置文件中增加参数
vim /etc/docker/daemon.json
"data-root": "/docker"
重启docker服务
systemctl reload docker && systemctl restart docker && systemctl status docker
配置代理拉取镜像
mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
systemctl daemon-reload
systemctl restart docker