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

搜索

Docker官方镜像搜索

搜索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问题

img在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