一,卸载老版本docker,避免产生影响

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

二,三种安装方式:

1,Docker官方安装方式

官网:https://docs.docker.com/engine/install/centos/

2,docker离线包安装

下载地址:Index of linux/static/stable/x86_64/

2.1,解压包,移动到/usr/bin/

将docker 文件夹里面的东西都复制到 /usr/bin/ 里面

为什么复制到这个 /usr/bin/ 里面,因为docker 文件夹下都是docker 的命令,也就是可执行文件,也就是我们操作docker 的指令。

现在把这些指令都复制到 /usr/bin/ 里面,因为 /usr/bin/ 这个在在系统的PATH环境变量中。所以在随便一个目录都可以使用这个文件夹下的指令。

目的就是在随便一个目录下都可以使用docker 的指令

cp docker/*  /usr/bin/

2.2,配置 Systemd 服务。新建docker.service

为什么要写docker.service:

docker.service 是一个 systemd 单元文件,用于管理 Docker 守护进程(Docker daemon)的启动和停止。systemd 是一个在现代 Linux 系统中广泛使用的初始化系统和服务管理器。

编写 docker.service 文件的目的是为了定义 Docker 守护进程的配置和行为,以便 systemd 可以管理它。这样,你就可以使用 systemd 命令来启动、停止、重启和管理 Docker 守护进程。

vim /etc/systemd/system/docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

文件解释

[Unit]:这个部分定义了单元的元数据。
Description:描述了单元的名称,这里是 Docker 应用容器引擎。
Documentation:提供了关于 Docker 的文档链接。
After:指定了单元所依赖的其他单元,这里是 network-online.target 和 firewalld.service。
Wants:指定了单元所希望的其他单元,这里是 network-online.target

[Service]:这个部分定义了服务的配置。
Type=notify:指定了服务的类型为 notify,表示服务会在启动完成时向 systemd 发送通知。
ExecStart:指定了服务的启动命令,这里是 /usr/bin/dockerd,即 Docker 守护进程的可执行文件路径。
ExecReload:指定了服务的重载命令,这里是 /bin/kill -s HUP $MAINPID,表示当服务需要重新加载配置时,发送 HUP 信号给主进程。
LimitNOFILE:指定了服务允许的最大文件描述符数,这里设置为 infinity,表示无限制。
LimitNPROC:指定了服务允许的最大进程数,这里设置为 infinity,表示无限制。
TimeoutStartSec:指定了服务启动的超时时间,这里设置为 0,表示没有超时限制。
Delegate:指定了是否将服务的控制权委托给其他单元,这里设置为 yes,表示委托给其他单元。
KillMode:指定了服务被终止时的行为,这里设置为 process,表示终止主进程。
Restart:指定了服务在失败时是否重启,这里设置为 on-failure,表示只有在失败时才重启。
StartLimitBurst:指定了服务重启的次数限制,这里设置为 3,表示在一段时间内最多重启 3 次。
StartLimitInterval:指定了服务重启的时间间隔,这里设置为 60s,表示重启的时间间隔为 60 秒。

[Install]:这个部分定义了安装的相关信息。
WantedBy:指定了单元所希望安装到的目标,这里是 multi-user.target,表示希望在多用户模式下安装

2.3,启动docker

chmod +x /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl enable docker.service
systemctl start docker

2.4,自己确定需不需要安装docker-compose

地址:https://github.com/docker/compose/releases/download/v2.24.5/docker-compose


为什么安装:
Docker和Docker Compose是两个不同的工具,它们在容器化应用程序的管理和部署方面有不同的作用。

Docker是一个开源的容器化平台,它允许你在隔离的环境中运行应用程序。你可以使用Docker构建、发布和运行容器,每个容器都包含一个完整的应用程序及其依赖项。Docker提供了一种轻量级、可移植和可扩展的方式来打包和部署应用程序。

Docker Compose是一个用于定义和运行多个容器应用程序的工具。它使用YAML文件来配置应用程序的服务、网络和卷等方面的设置。通过Docker Compose,你可以定义一个多容器的应用程序,并使用单个命令来启动、停止和管理这些容器。它简化了多容器应用程序的部署和管理过程,并提供了更高级的功能,如容器间的连接和通信。

虽然Docker本身可以帮助你管理单个容器,但当你需要管理和部署多个容器组成的应用程序时,Docker Compose会更加方便和强大。它允许你使用一个文件来定义整个应用程序的架构,并且可以轻松地启动、停止和扩展多个容器。

因此,尽管你已经安装了Docker,但如果你计划管理和部署多容器应用程序,建议你安装Docker Compose。它将为你提供更好的工具和功能来简化多容器应用程序的管理和部署过程

上传虚拟机

cp docker-compose /usr/local/bin/

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version     ##软连接

###
这行代码创建了一个符号链接(symbolic link),将/usr/local/bin/docker-compose链接到/usr/bin/docker-compose。这样做的目的是为了在/usr/bin/目录下创建一个指向docker-compose的符号链接,使得docker-compose命令可以在系统的任何位置使用

3,国内源安装Docker

配置阿里云Docker Yum源

阿里云镜像源地址:mirrors.aliyun.com

升级 yum 和 配置源

## 如有旧版本:

备份现有 Yum 源配置:
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/backup/


## 升级 yum:

下载阿里云 Yum 源配置文件:
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
 
如果需要 EPEL 扩展源(可选),可以执行:
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo	
 
 
# 下载阿里云 CentOS 7 镜像源
cat > /etc/yum.repos.d/CentOS-SCLo.repo <<EOF
[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
EOF



## 配置docker仓库

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils

# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 安装Docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Step 4: 开启Docker服务
sudo service docker start

三,命令:

4,查看Docker版本

yum list docker-ce --showduplicates

5,安装指定版本

yum install docker-ce-18.03.0.ce  -y

或者

yum install -y docker-ce #默认安装的是最新版本

如有报错:docker-compose-plugin-2.27.1-1.el7.x86_6插件包怎么也下载不下来

手动下载 docker-compose-plugin RPM

yum install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-compose-plugin-2.27.0-1.el7.x86_64.rpm

###如果显示无法打开 https://download.docker.com   再下载一次这个rpm就可以了

 
yum install -y docker-ce    ##重新下载就可以了

6,启动docker

#systemctl enable docker   #开机自启
#systemctl start docker

7,查看docker版本状态

docker -v


docker version



# docker info         #查看docker运行状态,状态里查看Server 下有几个容器
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0

可以配置docker镜像加速,能够拉取镜像快一些

cat > /etc/docker/daemon.json << EOF
{
    "registry-mirrors": [
        "https://docker.211678.top",
        "https://docker.1panel.live",
        "https://hub.rat.dev",
        "https://docker.m.daocloud.io",
        "https://do.nark.eu.org",
        "https://dockerpull.com",
        "https://dockerproxy.cn",
        "https://docker.awsl9527.cn"
    ]
}
EOF

docker基本命令

镜像:
docker  version                        #查看客户/服务端进程
docker  images(已梅机思)                #查看容器里的镜像个数,信息
docker  stop     软件名                 #停止运行
docker  rmi      镜像地址/版本号         #删除镜像软件
docker  inspect  镜像id/镜像名称         #查看镜像详细信息
docker  rmi $(docker images -q)         #删除所有镜像
docker  push   仓库机ip:版本             #推送          (破池)
docker  pull   镜像名                    #拉取镜像命令   (谱)
search  镜像名                           #查找镜像             (search  色吃)
rmi     镜像id或名字                      #移除镜像
docker tag 旧镜像名:旧版本 新镜像名:新版本  #打标签。修改镜像名称版本

docker  cp <容器名或ID>:/logs/error.log  .    # 从容器复制文件到宿主机当前目录



容器:
1,docker ps                           #只查看正在运行状态的容器
2,docker ps -a                        #-a  查看所有容器
3,docker ps -a -q                     #只查看所有容器id
4,docker exec -it 容器名 /bin/bash     #进入容器
5,docker stop     容器名称或id          #停止容器
6,docker rm 容器名称或id                #删除容器
7,docker inspect  容器名                #查看容器详细信息
8,docker rename 容器名  修改容器名       #修改容器名
9,docker info   (引佛)                  #查看运行状态
10,docker stats(思忒得思)              #CPU占用情况
11,快捷键ctrl+p+q                        #退出容器
12,mysql -uroot -p'密码'                 #在容器里进入mysql

13,docker run -itd  --name=tomcat(软件名) -p 8080:8080   镜像地址/版本号    bin/bash   
####创建并运行进入容器
i:保持标准输入打开
-t:分配伪终端(终端交互)
-d:后台运行容器,并返回容器 ID
--name=tomcat 指定容器名称(不指定则自动生成)
-p 配置端口映射

修改文件,文件复制命令

1,# 将容器内的文件复制到主机
docker cp <container_name>:/path/11  /root/11   
2,# 在主机上编辑文件
3,# 将编辑后的文件复制回容器
docker cp /root/11  <container_name>:/path/to/file


#基于CentOS/RHEL/Fedora的容器
#进入容器内部修改。下载vim
# CentOS/RHEL 7及以下
yum update && yum install -y vim

# CentOS/RHEL 8及以上
dnf update && dnf install -y vim

# 或者使用microdnf(精简版)
microdnf update && microdnf install vim

其他命令

Docker 数据卷是用于持久化存储容器数据的机制,它独立于容器的生命周期存在
核心概念:
持久化存储:数据卷中的数据在容器删除后仍然保留
独立于容器:数据卷有自己的生命周期,不依赖于任何容器
跨容器共享:多个容器可以挂载同一个数据卷
高性能:直接使用宿主机的文件系统,性能优于容器层

数据卷解决了这些问题:
✅ 数据持久化:容器删除后数据不丢失
✅ 数据备份:可以轻松备份和恢复
✅ 数据共享:多个容器访问相同数据
✅ 性能优化:直接读写宿主机文件系统

数据卷:    #(volume  碗油木)
1,docker volume create                 # 创建匿名数据卷(自动生成名称)
2,docker volume create my-volume       # 创建命名数据卷
3,docker volume create --label env=prod db-volume                  # 创建带有标签的数据卷

4,docker volume ls                     # 列出所有数据卷
5,docker volume inspect my-volume      # 查看详细信息
6,docker volume inspect my-volume | grep -A 5 -B 5 Mountpoint       # 查看特定数据卷信息

7, docker volume rm my-volume          # 删除单个数据卷
8, docker volume rm -f my-volume       # 强制删除数据卷(即使有容器在使用)
9, docker volume prune                 # 删除所有未使用的数据卷
10,docker volume prune -f              # 交互式删除未使用的数据卷


11,docker run -d -v my-volume:/app/data --name my-container nginx    # 使用命名数据卷
12,docker run -d -v /app/data --name my-container nginx              # 使用匿名数据卷
13, docker run -v /host/path:/container/path  nginx                   # 直接挂载宿主机目录
14,docker run -d \
  -v volume1:/app/data1 \
  -v volume2:/app/data2 \
  --name my-container nginx                # 挂载多个数据卷

docker使用:

使用步骤是:虚拟机——docker服务——docker镜像——docker容器

国内镜像网址:https://daocloud.io/

镜像官网: https://hub.docker.com/

                   https://docker.xiaogenban1993.com/search?q=tomcat

                   https://666860.xyz

                   https://registry.cyou

1,拉取镜像,选择一个服务拉取

2,点进去,右上角有拉取命令

3,拉取镜像

[root@docker-server ~]# docker pull daocloud.io/library/nginx   #下载镜像
Using default tag: latest
latest: Pulling from library/nginx
0a4690c5d889: Pull complete
9719afee3eb7: Pull complete
44446b456159: Pull complete
Digest: sha256:f83b2ffd963ac911f9e638184c8d580cc1f3139d5c8c33c87c3fb90aebdebf76
Status: Downloaded newer image for daocloud.io/library/nginx:latest
daocloud.io/library/nginx:latest

1,拉取镜像:使用 docker pull 命令从 Docker Hub 拉取所需的镜像
docker pull xxx
(此处的xxx代表镜像名称,后面全部省略)

4,创建容器并且进入容器,运行镜像

Docker容器创建:
docker run -itd  --name=tomcat  软件名 -p 8080:8080   镜像地址/版本号  #运行进入容器  


run:运行
-i:保持标准输入打开
-t:分配伪终端(终端交互)
-d:后台运行容器,并返回容器 ID
--name=tomcat 指定容器名称(不指定则自动生成)
-p 配置端口映射

bin/bash: 下执行,运行命令


#访问其他端口
docker run -itd  --name=tomcat  软件名 -p 8081:8080   镜像地址/版本号
#tomcat默认监听8080端口,但访问8081,  8080映射到宿主机的8081端口

正常输出应为:8080/tcp -> 0.0.0.0:8080(表示所有网卡都能访问
此时再用 curl 192.168.68.250:8080 测试,应该就能访问了

如果输出中 端口映射 部分为空(或只有 8080/tcp 而没有 0.0.0.0:8080->8080/tcp),说明启动容器时没有配置端口映射,这就是 IP 无法访问的根本原因。
如果确认没有端口映射,必须重新启动容器并添加 -p 参数



查看容器列表中的端口映射
docker ps --filter "name=容器名称" --format "ID: {{.ID}}, 端口映射: {{.Ports}}"

重新配置映射端口
# 停止并删除旧容器
docker stop 容器名称或id && docker rm 容器名称或id

# 重新启动,强制将宿主机所有网卡的8080端口映射到容器8080
docker run -d --name 容器名称 -p 8080:8080 你的tomcat镜像名


验证端口映射是否生效
# 查看完整端口映射信息
docker port 容器名称

5,拉取完镜像,进行使用

docker exec -it  mysql  /bin/bash       #进入容器,再敲命令进行使用

6,访问

报错:如果docker容器里面服务启动正常如:tomcat 服务ip 但是访问不到前台页面    可能是没有配置映射端口

报错:tomcat 访问出现404,webapps目录下没有数据。需要添加数据

正确访问

7,映射多个端口

# 将容器8080端口同时映射到主机8081和8082端口
docker run -d -p 8081:8080 -p 8082:8080 镜像名版本


## 8081:8080 主机端口:容器端口
这样配置后,你就可以通过 http://localhost:8081 和 http://localhost:8082 同时访问容器内的同一个服务了。

8,映射配置文件

## 本地创建配置文件:
mkdir -p /root/nginx/{conf.d,html,logs}
touch  html/index.html


# 映射配置文件,容器文件挂载到本地
docker run -itd  --name=nginx  -p 8081:80  -v /root/nginx/html/index.html:/usr/share/nginx/html/index.html   nginx:stable-alpine3.21-perl


# 获取完整的默认配置文件
docker run --rm nginx:stable-alpine3.21-perl cat /usr/share/nginx/html/index.html > /root/nginx/html/index.html


####
修改本地配置文件,重启容器生效
vim  nginx
docker  restart nginx



# 映射多个配置文件
-v  /root/nginx/html/index.html:/usr/share/nginx/html/index.html
-v  /root/nginx/nginx.conf:/etc/nginx/nginx.conf

阿里云镜像服务

地址: https://cr.console.aliyun.com/cn-hangzhou/instances

阿里云容器镜像服务

1,配置阿里云的镜像仓库


 



2,创建阿里云的公开仓库


 


 


公开:在拉取的时候,不需要输入用户名和密码。推送仍然需要输入用户名和密码;
私有:拉取,推送都需要输入用户名和密码;

3,上传镜像

登录成功
打标签

上传


上传成功之后:


 


1,使用自己的私有仓库


 

[root@coding-start ~]# docker login --username=youngfit --password='***' registry.cn-hangzhou.aliyuncs.com
[root@coding-start ~]# docker tag daocloud.io/library/nginx:1.12.0-alpine registry.cn-hangzhou.aliyuncs.com/cloud2204/nginx:1.12
[root@coding-start ~]# docker push registry.cn-hangzhou.aliyuncs.com/cloud2204/nginx:1.12

2,查看上传的镜像


自己的nginx:1.12版本已经上传成功!
阿里云的镜像加速器


 

配置阿里加速器:
如果这个目录/etc/docker/不存在就创建
[root@docker-server ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://ukblsmil.mirror.aliyuncs.com"]
}
[root@docker-server ~]# systemctl daemon-reload
[root@docker-server ~]# systemctl restart docker

容器文件系统打包


1, 第一种方式

docker export  -o  nginx.tgr  软件名     #导出到root下


scp  nginx.tgr   目标虚拟机ip:虚拟机哪里(如root下)    #迁移到另一台虚拟机

docker  import   nginx.tgr   镜像名:版本号              #在复制过来后,导入到虚拟机

2,第二种方式

docker export   容器名   >  nginx3.tar

#(export  ex博特)
# (import  引波特)


 

阿里云推送

公开:在拉取的时候,不需要输入用户名和密码。推送仍然需要输入用户名和密码

私有:拉取,推送都需要输入用户名和密码

在浏览器搜索阿里云, 阿里云里搜索容器, 创建镜像仓库,仓库类型,下一步本地仓库
在容器个人实例里点击访问凭证,设置密码

公开,私有 :

虚拟机里的镜像推送到阿里云:

登录命令不用修改
修改名字tag后面可以换成镜像地址/版本号 ,中间不动,最后版本号随意 
推送命令不变,最后加个版本号 

阿里云拉取到虚拟机

复制镜像仓库里镜像的公网地址, (前提安装docker)
在虚拟机上输入: docker pull 公网地址:版本号

1. 登录阿里云 Container Registry

$ docker login --username=aliyun8795639130 registry.cn-hangzhou.aliyuncs.com


##用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
##您可以在访问凭证页面修改凭证密码。
##注意:使用 RAM 用户(子账号)登录镜像仓库时,不支持企业别名带有英文半角句号(.)。

2. 从Registry中拉取镜像

$ docker pull registry.cn-hangzhou.aliyuncs.com/xrf8730/mysql:[镜像版本号]

3. 将镜像推送到Registry

$ docker login --username=aliyun8795639130   --password='xrf218730'  registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xrf8730/mysql:[镜像版本号]    
$ docker push registry.cn-hangzhou.aliyuncs.com/xrf8730/mysql:[镜像版本号]

##请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

docker login   登录阿里云
docker tag     打标签
docker push     推送

阿里云镜像加速器,拉取镜像时快些

登录阿里云看容器里点击镜像加速器——>选择CentOS——>在虚拟机创建/etc/docker/key.json目录——>vim /etc/docker/dsemon.json
里面写入   "registry-mirrors": ["https://ukblsmil.mirror.aliyuncs.com"]  
重启       systemctl   restart  docker

Harbor镜像仓库

http连接:

下载压缩包,或上传,解压       wget  https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz      #下载压缩包,解压
下载编排工具,或上传          curl  -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose      #下载编排工具
编排工具移动再改下名          mv  docker-compose-Linux-x86_64   /usr/local/bin/docker-compose
授予权限                     chmod +x /usr/local/bin/docker-compose
进解压好的目录               cd  harbor 
修改,注释掉,用http访问网页  vim  harbor.yml  
                      hostname:本机ip)            (#https 注释)    (# port: 443 注释)
                    (#certificate 注释)          (#private_key 注释)
执行脚本                    ./install.sh 
访问网页                     本机ip
                            默认用户名admin   密码Harbor12345

https连接,可以做,可以不做

创建目录                              mkdir -p /data/cert/
进目录                                cd  /data/cert  
创建私钥                              openssl genrsa -out /data/cert/server.key 2048 
生成证书                              openssl req -x509 -new -nodes -key /data/cert/server.key -subj "/CN=本机ip" -days 3650 -out /data/cert/server.crt  
查看私钥,证书所在路径                 ls  pwd
进解压出来的目录                      cd /root/harbor
修改。 注释解开                       vim harbor.yml
                              certificate:证书的路径      
                              private_key:私钥的路径
重启,执行脚本                       ./prepare

容器重启和关闭

                                 cd /root/harbor
会把容器停止,删掉                 docker-compose down
启动容器并放在后台                 docker-compose down  up -d 

Harbor网页创建仓库

需要仓库机和客户机,两台虚拟机,客户机是上面http连接的

在一台新的虚拟机做,编辑仓库ip              vim /etc/docker/daemon.json        
                                          { "insecure-registries": ["客户机的ip"] }
重启                                      systemctl restart docker
网页上的命令                              网页新建项目 ,——默认  —— 点击新建的项目——镜像仓库——里面有推送命令

推送,在仓库机上做

登录 默认用户名admin 密码Harbor12345      docker  login    客户机ip  
打包,最后改名字前有个仓库路径不要删       docker  tag   镜像名    客户机ip/darbor/镜像名:版本 
推送                                    docker  push  镜像名    客户ip:版本

拉取,可以在任意虚拟机拉取,前提做了docker安装

点击项目进去——镜像仓库——点击镜像——有个pull命令,直接复制
在虚拟机上输入 :     docker  pull  复制的命令

离线docker镜像  导入到liunx虚拟机docker服务器上

1,在源机器上导出镜像

# 查看现有镜像
docker images

# 保存镜像为 tar 文件(单个镜像)
docker save -o image_name.tar image_name:tag

# 或者保存多个镜像
docker save -o images.tar image1:tag1 image2:tag2

# 保存所有镜像
docker save -o all_images.tar $(docker images -q)

2,将镜像文件传输到目标虚拟机

# 使用 scp 传输(如果网络可达)
scp image_name.tar user@virtual_machine_ip:/path/to/destination/

# 或者使用 U 盘、共享文件夹等物理方式

3,在目标虚拟机上导入镜像

# 进入文件所在目录
cd /path/to/destination/

# 加载镜像
docker load -i image_name.tar

# 查看导入的镜像
docker images

离线的容器

使用 docker export 和 docker import(用于容器)

1. 导出容器为文件

# 导出运行中的容器
docker export container_name > container.tar

# 或者
docker export -o container.tar container_name

2. 导入容器为镜像

# 在目标机器上导入
cat container.tar | docker import - image_name:tag

# 或者
docker import container.tar image_name:tag

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐