重庆有多少网站保之友微网站怎么建
- 作者: 五速梦信息网
- 时间: 2026年03月21日 03:50
当前位置: 首页 > news >正文
重庆有多少网站,保之友微网站怎么建,淘宝网站都是怎么做的,网站建设公司招商Docker
背景引入 在实际开发过程中有三个环境#xff0c;分别是#xff1a;开发环境、测试环境以及生产环境#xff0c;假设开发环境中开发人员用的是jdk8#xff0c;而在测试环境中测试人员用的时jdk7#xff0c;这就导致程序员开发完系统后将其打成jar包发给测试人员后…Docker
背景引入 在实际开发过程中有三个环境分别是开发环境、测试环境以及生产环境假设开发环境中开发人员用的是jdk8而在测试环境中测试人员用的时jdk7这就导致程序员开发完系统后将其打成jar包发给测试人员后测试人员由于环境不同而导致无法运行。 此时如果开发人员将打好的jar包以及环境一起放到一个容器中然后将容器发给测试人员此时测试人员就不会因为环境不同而无法运行程序。这样也就规避了软件跨环境迁移问题
Docker架构 如图所示Docker主要分为三部分 Clients客户端 Docker客户端用来向Docker发送命令Docker客户端会随着Docker的安装而安装 HostsDocker核心RegistriesDocker远程仓库 在Docker核心中有两部分local host本机以及remote host远程机器 Docker在本机安装完之后会以deamon守护进程的形式存在即会在后台运行的进程该守护进程中有两部分 image镜像container容器 镜像均来源于Docker远程仓库该仓库主要有两种 官方提供的仓库Docker Hub自己搭建的私有仓库Private registry
Docker基础定义 DockerDocker是一种容器技术解决软件跨环境迁移问题 它可以帮助我们下载应用镜像创建并运行镜像的容器。从而达到快速部署应用即它可以让开发者打包他们的应用以及依赖包到一个轻量级的、可移植的容器中然后发布到任意流行的Linux机器上 镜像将应用所需的系统函数库、依赖、配置等与应用一起打包得到的就是镜像 Docker安装应用时会自动搜索并下载应用镜像image镜像仓库存储和管理镜像的平台Docker官方维护了一个公共仓库Docker Hub注意镜像可以让我们快速跨操作系统部署应用而忽略其运行环境、配置是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖等 容器Docker会在运行镜像时创建一个相互隔离环境称为容器 容器使用的是沙箱机制相互隔离性能开销极低 镜像与容器的关系 它俩就像是面向对象程序设计中的类和对象一样镜像是静态的定义而容器是镜像运行时的实体容器可以被创建、启动、暂停、停止、删除等等
CentOS7安装Docker Step1 首先如果系统中已经存在旧的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 \docker-ceStep2 安装yum工具 yum install -y yum-utils \device-mapper-persistent-data \lvm2 –skip-brokenStep3 配置Docker的yum源 yum-config-manager –add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i s/download.docker.com/mirrors.aliyun.com\/docker-ce/g /etc/yum.repos.d/docker-ce.repoyum makecache fastStep4 安装Docker yum install -y docker-ceStep5 Docker启动与校验 # 启动Docker
systemctl start docker# 停止Docker
systemctl stop docker# 重启
systemctl restart docker# 设置开机自启
systemctl enable docker# 执行docker ps命令如果不报错说明安装启动成功
docker psDocker配置镜像加速以阿里云为例 Step1 创建目录mkdir -p /etc/docker Step2 访问阿里官网在首页的产品中找到阿里云的容器镜像服务 Step3 配置镜像加速 # 注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json -EOF
{builder: {gc: {defaultKeepStorage: 20GB,enabled: true}},experimental: false,registry-mirrors: [https://st5sw75p.mirrorcgrs572.aliyuncs.com,https://docker.registry.cyou,https://docker-cf.registry.cyou,https://dockercf.jsdelivr.fyi,https://docker.jsdelivr.fyi,https://dockertest.jsdelivr.fyi,https://mirror.aliyuncs.com,https://dockerproxy.com,https://mirror.baidubce.com,https://docker.m.daocloud.io,https://docker.nju.edu.cn,https://docker.mirrors.sjtug.sjtu.edu.cn,https://docker.mirrors.ustc.edu.cn,https://mirror.iscas.ac.cn,https://docker.rainbond.cc]
}
EOFStep4 重新加载配置systemctl daemon-reload Step5 重启Dockersystemctl restart docker
问题 在使用yum安装时若包如图所示错误则解决步骤如下 通过vi /etc/yum.repos.d/CentOS-Base.repo打开文件CentOS-Base.repo然后将文件中的镜像替换为阿里镜像文件内容更改如下 # CentOS-Base.repo
#
The mirror system uses the connecting IP address of the client and the
update status of each mirror to pick mirrors that are updated to and
geographically close to the client. You should use this for CentOS updates
unless you are manually picking other mirrors.
#
If the mirrorlist does not work for you, as a fall back you can try the
remarked out baseurl line instead.
#
#[base]
nameCentOS-\(releasever - Base - mirrors.aliyun.com
failovermethodpriority
baseurlhttp://mirrors.aliyun.com/centos/\)releasever/os/\(basearch/http://mirrors.aliyuncs.com/centos/\)releasever/os/\(basearch/http://mirrors.cloud.aliyuncs.com/centos/\)releasever/os/\(basearch/
gpgcheck1
gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#released updates
[updates]
nameCentOS-\)releasever - Updates - mirrors.aliyun.com
failovermethodpriority
baseurlhttp://mirrors.aliyun.com/centos/\(releasever/updates/\)basearch/http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck1
gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
nameCentOS-\(releasever - Extras - mirrors.aliyun.com
failovermethodpriority
baseurlhttp://mirrors.aliyun.com/centos/\)releasever/extras/\(basearch/http://mirrors.aliyuncs.com/centos/\)releasever/extras/\(basearch/http://mirrors.cloud.aliyuncs.com/centos/\)releasever/extras/\(basearch/
gpgcheck1
gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
nameCentOS-\)releasever - Plus - mirrors.aliyun.com
failovermethodpriority
baseurlhttp://mirrors.aliyun.com/centos/\(releasever/centosplus/\)basearch/http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck1
enabled0
gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#contrib - packages by Centos Users
[contrib]
nameCentOS-\(releasever - Contrib - mirrors.aliyun.com
failovermethodpriority
baseurlhttp://mirrors.aliyun.com/centos/\)releasever/contrib/\(basearch/http://mirrors.aliyuncs.com/centos/\)releasever/contrib/\(basearch/http://mirrors.cloud.aliyuncs.com/centos/\)releasever/contrib/$basearch/
gpgcheck1
enabled0
gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7执行以下两个命令刷新重载即可 yum clean all
yum makecacheDocker命令
Docker服务相关命令
服务相关命令解释systemctl start docker启动Docker服务systemctl status docker查看已经启动的Docker服务的状态systemctl stop docker停止Docker服务systemctl restart docker重启Docker服务systemctl enable docker设置Docker为开机自启动 Docker的Image镜像相关命令 注意此处只列举常用镜像命令其余可详见官方文档 命令说明文档地址docker images查看本地镜像docker imagesdocker search 镜像名查看Docker库是否有对镜像docker pull 镜像名拉取镜像docker pulldocker push推送镜像到DockerRegistrydocker pushdocker rmi删除本地镜像docker rmidocker rmi f强制删除本地镜像docker build构建镜像。详见自定义镜像部分内容 docker images -q只显示所有镜像的id docker search 镜像名查看docker官方镜像时无法连接成功但是可以直接docker pull 镜像名来拉取镜像原因 在现有版本中无法使用docker search 镜像名查看docker官方镜像而是使用docker search register.liberx.info/镜像名来查看docker官方镜像如图所示 docker pull从docker仓库拉取镜像时若不加版本号则会下载最新版本若想加版本号则形式为docker pull 镜像名:版本号。相应版本号可在Docker hub官网查看 删除本地镜像时有两种方式 删除指定镜像 docker rmi Image ID即镜像IDdocekr rmi 镜像名:版本号 一般不会加:版本号除非系统中有多个版本的镜像 删除所有镜像docker rmi docker images -q
代码示例 Docker容器相关命令 此处只列举出常用命令具体可详见官网或菜鸟教程 命令说明文档地址docker run创建并运行容器docker rundocker stop停止指定容器docker stopdocker start启动指定容器该容器已存在docker startdocker restart重新启动容器docker restartdocker ps查看正在运行的容器docker psdocker ps -a查看创建的所有容器包括运行和未运行的docker ps -aq查看创建的所有容器的id包括运行和未运行的docker rm 容器id或容器名 删除指定的未在运行的容器docs.docker.comdocker rm -f 容器id或容器名删除指定的正在运行的容器docker rm docker ps -aq 删除创建的所有未运行的容器docker rm -f docker ps -aq删除创建的所有正在运行的容器docker logs查看容器运行日志docker logsdocker exec -it 容器名 /bin/bash进入容器docker execdocker exec -it 容器名 bash进入容器docker save保存镜像到本地压缩文件docker savedocker load -i 镜像压缩文件加载本地压缩文件到镜像docker loaddocker inspect 容器名查看容器详细信息docker inspectdocker update –restartalways [容器名/容器id]设置指定Docker容器开机自启
docker run创建并运行容器
常用配置参数
配置参数解释-i交互式操作容器-t给容器分配一个终端-d让容器后台运行-p 宿主机端口:容器内端口将宿主机即Linux系统端口映射到容器内的端口-e配置容器内的进程运行时的参数即配置环境变量–name自定义容器名或–name 自定义容器名给容器命名–alias 自定义容器别名给容器设置别名-v 宿主机目录或文件:容器内目录或文件配置数据卷具体可详见数据卷配置内容– network 网络名将容器加入到 已创建 的网络中。REPOSITORY:TAG即镜像名:版本号若未指定版本号则默认为最新版本 若只用-it则在进入容器然后使用exit退出容器后该容器也会自动停止运行 若用-id则不能直接在docker run后加/bin/bash来直接进入容器需使用docker exec -it 容器名 /bin/bash或docker exec -it 容器名 bash进入容器 创建完后会自动显示当前容器的id如图所示即239d0287448eafe208a04a21a4b848c22a316bd39a5d7e5d02c12eb97d1e676f -it与-id的区别 -it创建的容器称为交互式容器exit退出后就会结束运行交互式容器在创建时就可进入容器内-id创建的容器为守护式容器exit退出后仍然会在后台运行守护式容器必须通过docker exec -it 容器名 /bin/bash或docker exec -it 容器名 bash进入容器 创建并运行容器时默认进入的即是工作目录 – network 网络名 当使用docker run来创建并运行容器同时将容器加入到对应的网络中时若网络不存在则必须使用网络相关命令先创建。具体创建过程可详见网络部分内容当在Docker Compose中将对应服务加入到网络中时网络可以不存在因为Docker Compose会自动创建对应的网路。详见Docker Compose部分内容
docker ps 不在示例可详见docker run示例 docker ps查看运行中容器这个命令也可以加格式化访问这样会更加清爽如下所示 docker ps –format table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}} docker ps -a查看所有容器包括运行中的和未运行的。这个命令也可以加格式化访问这样会更加清爽如下所示 docker ps -a –format table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}
设置命令别名
给常用Docker命令起别名方便我们访问 Step1 通过vi /root/.bashrc修改/root/.bashrc文件 输入完该命令后即可进入到.bashrc文件如图所示原有文件内容如下 起完别名后wq保存并退出
Step2 执行命令source /root/.bashrc使别名生效即可
数据卷 数据卷是宿主机中的一个目录或文件并且该目录或文件需要通过-v参数来与容器内的目录或文件进行映射 当容器中的目录与数据卷目录绑定之后此时任意一方的修改都会立即同步一个数据卷可以被多个容器同时挂载可以此来实现容器间的数据交互一个容器也可以被挂载多个数据卷 数据卷作用 实现容器数据的持久化此时数据不会随着容器的删除而消失实现外部机器与容器间的通信实现容器之间的数据交换 注意 /var/lib/docker/volumes这个目录就是默认的存放所有容器数据卷的目录其下会再根据数据卷名称创建新目录格式为/数据卷名/_data 为什么不让容器目录直接指向宿主机目录呢 因为直接指向宿主机目录就与宿主机强耦合了如果切换了环境宿主机目录就可能发生改变了。由于容器一旦创建目录挂载就无法修改这样容器就无法正常工作了。但是容器指向数据卷一个逻辑名称而数据卷再指向宿主机目录就不存在强耦合。如果宿主机目录发生改变只要改变数据卷与宿主机目录之间的映射关系即可。 不过我们发现由于数据卷目录比较深不好寻找通常我们也允许让容器直接与宿主机目录挂载而不使用数据卷
数据卷相关命令
命令说明文档地址docker volume create创建数据卷docker volume createdocker volume ls查看所有数据卷docs.docker.comdocker volume rm 卷名删除指定数据卷docs.docker.comdocker volume inspect查看某个数据卷的详情。若加卷名则查询指定数据卷若不加则查看所有数据卷docs.docker.comdocker volume prune清除所有未使用的数据卷docker volume prune
配置数据卷
容器与宿主机进行数据交换
用到的命令 创建并启动容器时使用-v参数配置数据卷docker run … -v 宿主机目录或文件:容器内目录或文件…注意 目录或文件必须是绝对路径若目录或文件不存在会自动创建可以挂载多个数据卷宿主机目录/root/…等同于~/…而容器目录只能用/root/… 以redis为例 容器间数据交换 有两种方式 方式一多个容器挂载同一个数据卷方式二使用数据卷容器注意方式一不在演示主要演示方式二 数据卷容器解释 假设现在有三个容器c1、c2、c3c3挂载了一个数据卷然后将c1、c2分别挂载到c3容器上此时就相当于c1、c2、c3挂载了同一个数据卷。这样就实现了容器间的通信此时就算c3容器出了问题c1、c2仍然可以通过数据卷进行通信c3就被称为数据卷容器 示例 Step1 创建并启动名为c3的redis容器 docker run -id –namec3 -v /volume redis 注意 挂载时并未指定宿主机的挂载目录即此时宿主机为匿名数据卷只指定了c3容器的目录此时系统自动会去创建宿主机对应的挂载目录如图所示 Name数据卷名称。由于定义容器未设置容器名这里的就是匿名卷自动生成的名字一串hash值。Source宿主机目录Destination : 容器内的目录 上述配置是将容器内的/volume这个目录与数据卷挂载。于是在宿主机中就有了/var/lib/docker/volumes/数据卷名称/_data这个目录。这就是匿名数据卷对应的目录其使用方式与普通数据卷没有差别。 Step2 创建并启动名为c1的redis容器然后通过–volumns-from 数据卷容器名来继承数据卷容器即c3 docker run -id –namec1 –volumns-from c3 redisStep3 创建并启动名为c2的redis容器然后通过–volumns-from 数据卷容器名来继承数据卷容器即c3 docker run -id –namec2 –volumns-from c3 redis挂载本地目录或文件 由容器间数据交换的示例Step1可知数据卷的目录比较深如果我们去操作数据卷目录会不太方便。所以我们也会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似 # 挂载本地目录
-v 本地目录:容器内目录
挂载本地文件
-v 本地文件:容器内文件注意 本地目录或文件必须以 / 或 ./开头如果直接以名字开头则会被识别为数据卷名而非本地目录名。如下示例所示 -v mysql:/var/lib/mysql会被识别为一个数据卷叫mysql运行时会自动创建这个数据卷-v ./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录运行时如果不存在会创建目录
Docker应用部署 从远程仓库拉取镜像的实现步骤 搜索对应应用的镜像并拉取应用镜像 注意若本地有镜像压缩包则直接将镜像压缩包上传到虚拟机中即可此时就不需要该步骤了 创建容器并进行端口映射 外部机器操作容器中的应用 外部机器是无法直接操作容器因为 容器是隔离环境外部容器与容器不互通但是外部机器与宿主机是互通的而宿主机又与容器互通所以可以将宿主机的端口与容器端口进行一个映射这样外部机器在访问宿主机对应端口时就相当于在访问容器。如图所示
MySQL部署 Step1 查看Docker库是否有MySQL镜像并拉取镜像 docker search register.liberx.info/mysql
docker pull mysqlStep2 创建mysql目录并进入到该目录下 mkdir ~/mysql
cd ~/mysqlStep3 创建并运行容器同时设置端口映射、目录映射等 docker run -id --name mysql -p 3307:3306 -v \(PWD/conf:/etc/mysql/conf.d \-v \)PWD/logs:/logs -v \(PWD/data:/var/lib/mysql \-v \)PWD/init:/docker-entrypoint-initdb.d -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORD123456 \mysql–name 自定义容器名:自定义容器名-p 宿主机端口:容器内端口将宿主机的指定端口映射到容器内的指定端口-e KEYVALUE配置容器内进程运行时的一些参数即配置环境变量。KEY和VALUE都由容器内进程决定 TZAsia/Shanghai是设置时区MYSQL_ROOT_PASSWORD123456初始化root用户的mysql密码 -v 宿主机目录或文件:容器内目录或文件配置数据卷 -v \(PWD/conf:/etc/mysql/conf.d配置目录挂载-v \)PWD/logs:/logs日志目录挂载-v \(PWD/data:/var/lib/mysql数据目录挂载 存放MySQL数据库的所有数据文件包括表的结构、数据、索引等信息 -v \)PWD/init:/docker-entrypoint-initdb.d初始化脚本挂载 MySQL 容器的启动过程中如果该目录存在 SQL 脚本或其它初始化文件MySQL 会自动执行这些文件。这通常用于在 MySQL 容器第一次启动时初始化数据库 \(PWD代表当前目录即mysql目录下) Step4 进入mysql容器内部 docker exec -it mysql /bin/bashStep5 登录mysql 输入命令mysql -uroot -p后输入密码即可登录 步骤如图所示 之后就可以在外部机器中来连接该mysql容器并使用(此处以Navicat为例)步骤如图所示 Navicat创建连接 利用Navicat创建数据库步骤略
Tomcat部署 Step1 查看Docker库是否有MySQL镜像并拉取镜像 docker search register.liberx.info/tomcat
docker pull tomcatStep2 创建mysql目录并进入到该目录下 mkdir ~/tomcat
cd ~/tomcatStep3 创建并运行容器同时设置端口映射、目录映射等 docker run -id \--name tomcat \-p 8080:8080 \-v \)PWD:/usr/local/tomcat/webapps \tomcat-v \(PWD:/uer/local/tomcat/webapps将容器当前目录挂载到容器的webapps中 Step4 在Tomcat目录下创建一个test测试目录并在该目录下创建文件index.html文件代码如下 h1Tomcat访问成功/h1Step5 外部机器测试是否成功
Nginx部署 Step1 查看Docker库是否有MySQL镜像并拉取镜像 docker search register.liberx.info/nginx
docker pull nginxStep2 创建nginx/conf目录并在该目录下创建nginx.conf文件 mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
vim nginx.conf将以下命令复制到nginx.conf文件中 user nginx;
worker_processes 1;error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main \)remote_addr - \(remote_user [\)time_local] \(request \)status \(body_bytes_sent \)http_referer \(http_user_agent \)http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip oninclude /etc/nginx/conf.d/*.conf
}Step3 返回到nginx目录下创建并运行容器同时设置端口映射、目录映射等 docker run -id --namenginx -p 80:80 -v \(PWD/conf/nginx.conf:/etc/nginx/nginx.conf \-v \)PWD/logs:/var/log/nginx -v \(PWD/html:/usr/share/nginx/html \nginx-v \)PWD/conf/nginx.conf:/etc/nginx/nginx.conf配置文件挂载-v \(PWD/logs:/var/log/nginx日志目录挂载-v \)PWD/html:/usr/share/nginx/html静态资源目录挂载 Step4 外部机器测试是否成功 配置文件内容解析 # 指定运行nginx 的用户默认是 nginx 用户
user nginx;
定义工作进程数若为auto则表示自动根据 CPU 核心数调整
worker_processes 1;
定义错误日志文件的位置和日志级别; warn 表示记录警告及更高级别的错误信息
error_log /var/log/nginx/error.log warn;
定义 Nginx 启动后保存进程 ID 的文件路径用于管理进程
pid /var/run/nginx.pid;# 事件块 events {# 每个工作进程允许的最大并发连接数worker_connections 1024; }
HTTP块 定义 Web 服务相关配置
http {# 引入外部文件 /etc/nginx/mime.types定义各种文件的 MIME 类型include /etc/nginx/mime.types;# 设置默认 MIME 类型。当无法识别文件类型时使用 application/octet-stream即通用的二进制流default_type application/octet-stream;# 定义日志格式# \(remote_addr客户端 IP 地址# \)remote_user客户端认证的用户名# \(time_local本地时间# \)request客户端请求的完整内容# \(statusHTTP 状态码# \)body_bytes_sent发送给客户端的响应体字节数# \(http_referer请求来源Referer# \)http_user_agent用户代理信息如浏览器类型# \(http_x_forwarded_for代理服务器传递的客户端真实 IP如果存在log_format main \)remote_addr - \(remote_user [\)time_local] \(request \)status \(body_bytes_sent \)http_referer \(http_user_agent \)http_x_forwarded_for;# 指定访问日志的存储位置和日志格式使用上面定义的 mainaccess_log /var/log/nginx/access.log main;# 开启高效文件传输sendfile on;# 提高文件传输性能#tcp_nopush on;# 定义 HTTP 长连接的超时时间秒。客户端连接超过该时间未发送请求时将断开。keepalive_timeout 65;# 开启HTTP响应的 Gzip 压缩以减少传输数据量#gzip on# 引入 /etc/nginx/conf.d/ 目录下的所有配置文件支持多个虚拟主机include /etc/nginx/conf.d/*.conf
}Redis部署 Step1 查看Docker库是否有MySQL镜像并拉取镜像 docker search register.liberx.info/redis
docker pull redisStep2 创建mysql目录并进入到该目录下 mkdir ~/redis
cd ~/redisStep3 创建并运行容器同时设置端口映射、目录映射等 docker run -id --name redis -p 6380:6379 \redis若报如下错误则代表宿主机的6379端口号被占用此时换个宿主机端口号即可 Error starting userland proxy: listen tcp4 0.0.0.0:6379: bind: address already in use. Step4 使用外部机器redis测试是否成功 注意要进入到windows的redis目录下打开cmd命令窗口输入以下命令进行测试 redis-cli.exe -h 宿主机ip地址 -p nginx容器端口号Docker自定义镜像 自定义镜像主要分为四步 准备Linux运行环境java项目并不需要完整的操作系统仅仅是基础运行环境即可安装并配置JDK拷贝jar包配置启动脚本 上述步骤中的每一次操作其实都是在生产一些文件系统运行环境、函数库、配置最终都是磁盘文件所以镜像就是一堆文件的集合。 但需要注意的是镜像文件不是随意堆放的而是按照操作的步骤分层叠加而成每一层形成的文件都会单独打包并标记一个唯一id称为Layer层。这样如果我们构建时用到的某些层其他人已经制作过就可以直接拷贝使用这些层而不用重复制作。 例如第一步中需要的Linux运行环境通用性就很强所以Docker官方就制作了这样的只包含Linux运行环境的镜像。我们在制作java镜像时就无需重复制作直接使用Docker官方提供的CentOS或Ubuntu镜像作为基础镜像 。然后再搭建其它层即可这样逐层搭建最终整个Java项目的镜像结构如图所示 Docker镜像原理 用到的方法 命令说明文档地址docker save保存镜像到本地压缩文件docker savedocker load -i 镜像压缩文件加载本地压缩文件到镜像docker loaddocker inspect 容器名查看容器详细信息docker inspect
利用命名方式制作
通过指定容器创建自定义镜像docker commit 容器id 自定义镜像名称:自定义版本号将自定义的镜像转为压缩文件docker save -o 自定义压缩文件名称 自定义镜像名称:自定义版本号将自定义镜像转为的压缩文件转为另一个镜像docker load -i 压缩文件名称 注意容器转为自定义的镜像后目录挂载即数据卷中的内容不会添加到新的镜像中若想要其中的内容则可以在利用自定义的对象创建容器时配置数据卷就可以了 利用Dockerfile制作自定义镜像 由于制作镜像的过程中需要逐层处理和打包比较复杂所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程每一层要做的事情用固定的语法写下来交给Docker去执行即可。这种记录镜像结构的文件就称为Dockerfile其对应的语法可以参考官方文档 Dockerfile是一个记录镜像结构的文本文件包含了一条条指令每一条指令构建一层基于基础的镜像最终构建出一个新的镜像 对于开发人员可以为开发团队提供一个完全一致的开发环境对于测试人员可以直接拿开发时所创建的镜像或者通过Dockerfile文件来创建一个新的镜像开始工作对于运维人员在部署时可以实现应用的无缝移植
快速入门 需求定义Dockerfile发布SpringBoot项目到Docker容器中 本快速入门项目DockerFileDemo的具体搭建可完全参考SpringBoot快速入门 Step1 执行Maven构建指令package来对该SpringBoot项目打包 Step2 将该SpringBoot项目的jar包传到宿主机的root目录下 Step3 利用mkdir /root/docker-files等同于mkdir ~/docker-files命令在root目录下创建项目文件目录docker-files来存放项目文件如 JAR 包、Dockerfile 等 若命令为mkdir ./docker-files或mkdir docker-files则必须保证当前所在目录为root目录因为.表示在当前目录下创建 Step4 将该jar包移动到docker-files目录下mv DockerFileDemo-0.0.1-SNAPSHOT.jar ./docker-files/ Step5 利用vim ./docker-files/dockerFileDemo在docker-files目录下创建并编写该项目对应的dockerfile文件dockerFileDemo该文件内容如下 # 指定基础镜像即父镜像
FROM openjdk:21-jdk
指明维护者/作者信息
LABEL maintainercgrs572 Your.Nameexample.com
将对应jar包复制到即将要创建的镜像的app目录中
COPY DockerFileDemo-0.0.1-SNAPSHOT.jar /app/DockerFiledemo.jar
指定容器创建时的默认命令
CMD [java, -jar, /app/DockerFiledemo.jar]指定的父镜像若在系统中不存在的话后续构建自定义镜像时该父镜像也会被下载。只是说此时构建自定义镜像的时间可能会延长可提前自行利用docker pull 镜像名:版本号来将父镜像下载到宿主机中 Step6 利用cd /root/docker-files进入docker-files目录 Step7 利用docker build -f dockerfile文件路径 -t 自定义镜像名:版本号 对应的dockerfile文件所在目录来构建镜像 由于博主已进入到docker-files目录所以最终命令为docker build -f ./dockerFileDemo -t dockerfiledemcon . 最后的.表示当前路径 命令解析 -f指定dockerfile文件及其路径-t指定自定义镜像名及其版本号 Step8 创建并运行容器docker run -id -p 9000:8080 dockerfiledemcon Step9 外部机器测试是否运行成功
利用Dockerfile制作自定义官方镜像
背景引入 本案例以CentOS7为例 Step1 从远程镜像仓库拉取Centos7到本地docker pull centos:7 若本地有centos7镜像则该步省略 Step2 创建并运行centos容器并进入该容器中docker run -it –namec1 centos /bin/bash 此处的命令可省略/bin/bash因为在官方的centos的dockerfile文件中的CMD命令已经指定了容器创建时的默认命令为 /bin/bash Step3 cd到root目录下然后执行vim a.txt命令最终截图如下 在以上示例中就存在问题 进入容器后默认进入的工作目录为/官方提供的centos镜像没有下载vim命令导致该命令不可用因此为了更加方便我们就可以来自定义镜像
快速入门 Step1 利用mkdir /root/docker-files等同于mkdir ~/docker-files命令在root目录下创建项目文件目录docker-files来存放项目文件如 JAR 包、Dockerfile 等 若命令为mkdir ./docker-files或mkdir docker-files则必须保证当前所在目录为root目录因为.表示在当前目录下创建 注意由于在子当以镜像的示例中已创建该目录所以该示例截图中不存在该步骤的命令 Step2 利用vim ./docker-files/centosdockerFile在docker-files目录下创建并编写该项目对应的dockerfile文件centosdockerFile该文件内容如下 # 指定基础镜像即父镜像
FROM centos:7
指明维护者/作者信息
LABEL maintainercgrs572 Your.Nameexample.com
指定在构建自定义镜像过程中执行的命令即 利用RUN安装vim到自定义镜像中
RUN yum install -y vim
设置后续指令的工作目录(即利用WORKDIR指定默认工作目录)
WORKDIR /usr
指定容器创建时的默认命令
CMD [/bin/bash]指定的父镜像若在系统中不存在的话后续构建自定义镜像时该父镜像也会被下载。只是说此时构建自定义镜像的时间可能会延长可提前自行利用docker pull 镜像名:版本号来将父镜像下载到宿主机中 注意若在构建自定义镜像源过程中yum无法下载则需要更换centos镜像的镜像源此时dockerfile文件代码如下 # 指定基础镜像即父镜像 FROM centos:7
指明维护者/作者信息
LABEL maintainercgrs572 Your.Nameexample.com
更换yum 镜像源保证yum可以正常工作
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum install -y vim
指定在构建自定义镜像过程中执行的命令即 利用RUN安装vim到自定义镜像中
RUN yum install -y vim
设置后续指令的工作目录(即利用WORKDIR指定默认工作目录)
WORKDIR /usr
指定容器创建时的默认命令
CMD [/bin/bash]Step3 利用cd /root/docker-files进入docker-files目录 Step4 利用docker build -f dockerfile文件路径 -t 自定义镜像名:版本号 对应的dockerfile文件所在目录来构建镜像 由于博主已进入到docker-files目录所以最终命令为docker build -f ./centosdockerFile -t centosdockerfile . 最后的.表示当前路径 Step5 创建并运行容器docker run -id -p 9000:8080 centosdockerfile 然后测试是否运行成功 此时进容器后默认的工作目录为/usr使用vim测试并未报错
DockerFile常用关键字
Dockerfile 指令解释FROM指定基础镜像即父镜像用于后续的指令构建。即指定Dockerfile是基于哪个image构建的MAINTAINER指明Dockerfile的作者/维护者。已弃用推荐使用LABEL指令LABEL添加镜像的元数据使用键值对的形式。RUN指定在构建自定义镜像过程中执行的命令。CMD指定容器创建时的默认命令。可以被docker run时指定的命令覆盖ENTRYPOINT设置容器创建时的主要命令。不可被docker run时指定的命令覆盖EXPOSE声明容器运行时监听的特定网络端口。ENV在容器内部设置环境变量。ADD将文件、目录或远程URL添加到镜像中。COPY将文件或目录复制到镜像中。VOLUME为容器创建挂载点或声明卷。WORKDIR设置后续指令的工作目录。USER指定后续指令的用户上下文。ARG定义在构建过程中传递给构建器的变量可使用 “docker build” 命令设置。ONBUILD当该镜像被用作另一个构建过程的基础时添加触发器。STOPSIGNAL设置发送给容器以退出的系统调用信号。HEALTHCHECK定义周期性检查容器健康状态的命令。SHELL覆盖Docker中默认的shell用于RUN、CMD和ENTRYPOINT指令。
网络
背景引入 容器间互相访问方式步骤如下 以MySQL镜像与自定义centos镜像为例 Step1创建并运行项目MySQL镜像对应的容器以及自定义centos7镜像对应的容器步骤略 创建完成后使用docker ps -a指令查看容器是否创建成功 MySQL镜像对应的容器名为mysql自定义centos7镜像对应的容器名为centos01 Step2使用docker inspect 容器名指令来查看容器mysql的Networks.bridge.IPAddress属性即ip地址 也可使用format来过来结果直接得出ip地址docker inspect –format{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}} 容器名 容器mysql的ip地址为172.17.0.2如图所示 Step3进入容器centos01中,利用ping 172.17.0.2检测是否能够访问容器mysql 注意若该容器未启动则需要先利用docker start 容器名/id将其启动然后利用docker exec -it 容器id/容器名 /bin/bash进入 有图可知只要知道对应容器的ip地址就可以实现容器间的互相访问
快速入门 由背景引入可知只要知道对应容器的ip地址就可以实现容器间的互相访问 但是容器的网络IP其实是一个虚拟的IP其值并不固定与某一个容器绑定如果我们在开发时写死某个IP而在部署时MySQL容器的IP发生变化这就会导致连接会失败所以通过ip地址来访问还是不可靠所以就有了网络步骤如下 Step1 利用docker network create 自定义网络名创建一个网络博主创建的网络名为webb Step2 利用docker network ls查看所有网络判断是否对应网络是否创建成功 Step3 利用docker network connect 容器要加入的网络名 要加入的容器 –alias 自定义容器别名来将mysql容器和centos01容器均加入创建的网络webb中 Step4 进入容器centos01中,利用ping 容器名或容器对应的别名检测是否能够访问容器mysql
网络相关命令
命令说明文档地址docker network create创建一个网络docker network createdocker network ls查看所有网络docs.docker.comdocker network rm删除指定网络docs.docker.comdocker network prune清除未使用的网络docs.docker.comdocker network connect使指定容器连接加入某网络docs.docker.comdocker network disconnect使指定容器连接离开某网络docker network disconnectdocker network inspect查看网络详细信息docker network inspect
Docker Compose 我们部署一个简单的java项目至少包含3个容器 MySQLNginxJava项目 而稍微复杂的项目其中还会有各种各样的其它中间件需要部署的东西远不止3个。如果还像之前那样手动的逐一部署就太麻烦了。 而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件YAML 格式来定义一组相关联的应用容器。 Docker Compose是一个编排多容器分布式部署的工具提供命令集来管理容器化应用的完整开发周期包括服务构建、启动和停止使用步骤 利用Dockerfile定义运行环境镜像使用docker-compose.yml定义组成应用的各个服务运行docker-compose up启动应用
Docker Compose安装
二进制包离线安装推荐 Step1去Github下载对应版本的二进制文件 Step2利用cd /usr/local/bin进入到/usr/local/bin目录下然后将二进制文件直接上传到该目录下 Step3利用mv oldName newName将文件docker-compose-linux-x86_64重命名为 docker-compose mv docker-compose-linux-x86_64 docker-composeStep4添加可执行权限sudo chmod x /usr/local/bin/docker-compose Step5验证是否安装成功docker-compose –version 卸载时直接删除对应的二进制包即可
快速入门 需求使用DockerCompose编排nginxspringboot项目 本示例以Docker自定义镜像的springboot项目为基准。在Docker自定义镜像中已经构建了自定义了springboot项目对象的镜像如图所示 Step1 将对应的官方镜像从docker仓库拉取下来:docker pull 镜像名:版本号 Step2 自定义项目的镜像本步骤略可详见自定镜像的部分内容示例 Step3 利用mkdir /root/docker-compose等同于mkdir ~/docker-files命令在root目录下创建项目文件目录docker-compose来存放项目文件如 JAR 包、Dockerfile 等 若命令为mkdir ./docker-compose或mkdir docker-compose则必须保证当前所在目录为root目录因为.表示在当前目录下创建 Step4 利用cd docker-compose进入到docker-compose目录下然后利用vim docker-compose.yml创建dockercompose文件docker-compose.yml该文件代码如下 # 指定dockercompose文件格式的版本
version: 3.8
定义服务
services:# 定义服务1nagix服务—自定义服务名即可nginx:# image: 镜像名:版本号image: nginx# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 80:80# 将指定服务链接到本服务中后期在该服务创建的容器中可直接通过指定服务名来访问指定服务links:- app# 将本地目录或文件挂载到容器内的目录或文件volumes:- ./nginx/conf.d:/etc/nginx/conf.d# 定义服务2app服务—自定义服务名即可app:# image: 镜像名:版本号image: dockerfiledemcon# 指定该服务对应的容器内部暴露的端口expose:- 8080在dockercompose新版本中version已被舍弃不过最好还是加上在dockercompose新版本中links已被舍弃先版本可以通过服务名称直接访问其他服务而不需要显式地使用 links所以可删除 最终文件代码如下 # 指定dockercompose文件格式的版本 version: 3.8
定义服务
services:# 定义服务1nagix服务—自定义服务名即可nginx:# image: 镜像名:版本号image: nginx# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 80:80# 将本地目录或文件挂载到容器内的目录或文件volumes:- ./nginx/conf.d:/etc/nginx/conf.d# 定义服务2app服务—自定义服务名即可app:# image: 镜像名:版本号image: dockerfiledemcon# 自定义该服务创建的容器名称container_name: appcon# 在同一网络下暴露该服务对应的容器端口expose:- 8080Step5 创建挂载的本地目录或文件 mkdir -p ./nginx/conf.d -p用来创建目录及其子目录 Step6 利用cd ./nginx/conf.d进入到conf.d目录下并在该目录下用vim nginx.conf创建并编写nginx配置文件nginx.conf文件该文件代码如下 解释当服务器监听到 80 端口的请求时nginx 会自动将请求转发到 app 服务的 8080 端口 此时nginx 会充当一个反向代理服务器将客户端的请求转发给后端服务app 服务处理 server {# 指定nginx服务器监听的端口listen 80;# 关闭访问日志记录access_log off;# 定义一个位置块处理所有以/开头的请求location / {# 将请求代理到名为app服务的8080端口proxy_pass http://app:8080;}
}Step7 在~/docker-compose目录下使用docker-compose up命令启动容器 该命令若为docker-compose up -d则代表后台启动 Step8 测试访问运行成功
注意 在使用Docker Compose来实现多个相互关联的Docker容器的快速部署时 若不定义并指定网络则Docker Compose会自动创建一个默认网络以此来实现不同服务对应的容器均在同一个默认网络下并能够通过服务名互相访问 在以上快速入门中就属于未定义并指定网络此时Docker Compose会创建一个默认的网络如图所示 在Docker Compose基本语法中的两个示例属于定义并指定网络 expose在同一网络下暴露该服务对应的容器端口 此时如果我在外部利用docker run -id -p 9000:8080 dockerfiledemcon命令创建了一个app服务所使用的镜像的容器并将宿主机的9000端口映射到容器的8000端口上则 docker run -p 9000:8080 这条命令是将 宿主机的 9000 端口 映射到 容器的 8080 端口。这意味着外部世界例如浏览器或者其他客户端通过宿主机的 9000 端口可以访问到容器的 8080 端口expose 是告诉 Docker 仅在容器网络中暴露端口 并不进行宿主机与容器之间的端口映射。expose 只是让其他同网络中的容器可以访问到暴露的端口。它并不会将容器的端口映射到宿主机的端口所以它们是互不干扰互不影响的。但是假设产生了影响则在app服务中利用container_name指明该服务所创建的容器名称即可
Docker Compose基本语法 docker run参数对应的docker compose指令 docker run 参数docker compose 指令说明–namecontainer_name指定容器名称-pports端口映射-eenvironment环境变量-vvolumes数据卷配置–networknetworks网络 其它docker compose指令 docker compose 指令说明build指定该服务的镜像是通过 Dockerfile 文件进行构建的context指定 Dockerfile文件及利用该文件构建镜像所需的其他文件所在的位置dockerfile指定要构建的镜像所对应的dockerfile文件名称。如果未指定则会默认查找名为 Dockerfile 的文件image指定服务要使用的镜像名称及版本号版本号可省略depends_on指定服务之间的启动顺序指定的服务会在当前服务启动之前启动expose在同一网络下暴露该服务对应的容器端口 build 若要使用的自定义镜像不存在且无法从官方仓库拉取则指定该服务的镜像是通过 Dockerfile 文件进行构建的。此时Docker Compose会自动根据Dockerfile文件来创建自定义镜像
示例1 此处以网络中的示例为例将MySQL镜像容器加入到自定义的网络webb中 创建并运行MySQ镜像的容器代码如下 当使用docker run时容器要加入的网络必须是已存在的若不存在则需要提前创建好对应的网络。此处假设自定义的webb网络已创建具体过程可详见网络部分内容 docker run -id --name mysql -p 3307:3306 -v \(PWD/conf:/etc/mysql/conf.d \-v \)PWD/logs:/logs -v $PWD/data:/var/lin/mysql -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORD123456 --network webbmysql如果用docker-compose.yml文件来定义就是这样 此处假设webb网络在外部不存在则文件代码如下 与docker run命令不同的是在Docker Compose文件中的网络可以不存在因为Docker Compose会自动创建对应的网路前提是该网络并未指定在外部存在。 # 指定dockercompose文件格式的版本
version: 3.8
定义服务
services:# 定义服务1nagix服务—自定义服务名即可mysql:# image: 镜像名:版本号image: mysql# 自定义该服务创建的容器名称container_name: mysql# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 3306:3306# 配置容器内的进程运行时的参数即配置环境变量environment:# 设置时区TZ: Asia/Shanghai# 设置root用户的登录密码MYSQL_ROOT_PASSWORD: 123# 将本地目录或文件挂载到容器内的目录或文件volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysql# 该服务创建的容器加入到指定的网络中networks:# 要加入的网络的别名- newwebb
定义网络
networks:# 定义网络别名newwebb:# 定义网络名称name: webb此处假设webb网络在外部存在则文件代码如下 注意若假设在外部存在的webb网络其实在外部是不存在的此时Docker Compose就不会自动创建对应网络需手动创建具体过程可详见网络部分内容 网络别名与外部网络的实际名称不一致 # 指定dockercompose文件格式的版本 version: 3.8
定义服务
services:# 定义服务1nagix服务—自定义服务名即可mysql:# image: 镜像名:版本号image: mysql# 自定义该服务创建的容器名称container_name: mysql# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 3306:3306# 配置容器内的进程运行时的参数即配置环境变量environment:# 设置时区TZ: Asia/Shanghai# 设置root用户的登录密码MYSQL_ROOT_PASSWORD: 123# 将本地目录或文件挂载到容器内的目录或文件volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysql# 该服务创建的容器加入到指定的网络中networks:# 要加入的网络的别名- newwebb
定义网络
networks:# 定义网络别名newwebb:# 指定外部已存在的网络external:# 已存在的网络名称name: webb网络别名与外部网络的实际名称一致 # 指定dockercompose文件格式的版本 version: 3.8
定义服务
services:# 定义服务1nagix服务—自定义服务名即可mysql:# image: 镜像名:版本号image: mysql# 自定义该服务创建的容器名称container_name: mysql# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 3306:3306# 配置容器内的进程运行时的参数即配置环境变量environment:# 设置时区TZ: Asia/Shanghai# 设置root用户的登录密码MYSQL_ROOT_PASSWORD: 123# 将本地目录或文件挂载到容器内的目录或文件volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysql# 该服务创建的容器加入到指定的网络中networks:# 要加入的网络的别名- newwebb
定义网络
networks:# 定义网络别名webb:# 指定该网络在外部已存在external: true示例2 黑马商城部署文件 # 指定dockercompose文件格式的版本 version: 3.8
定义服务
services:# 定义服务1mysql服务—自定义服务名即可mysql:# image: 镜像名:版本号image: mysql# 自定义该服务创建的容器名称container_name: mysql# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 3306:3306# 配置容器内的进程运行时的参数即配置环境变量environment:# 设置时区TZ: Asia/Shanghai# 设置root用户的登录密码MYSQL_ROOT_PASSWORD: 123# 将本地目录或文件挂载到容器内的目录或文件volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/data:/var/lib/mysql- ./mysql/init:/docker-entrypoint-initdb.d# 该服务创建的容器加入到指定的网络中networks:# 要加入的网络的别名- hm-net# 定义服务2hmall服务—自定义服务名即可hmall:# 指定该服务的镜像是通过 Dockerfile 文件进行构建的build: # 指定构建镜像所需的所有文件所在位置context: .# 指定Dockerfile文件名称若未指定则默认为Dockerfiledockerfile: Dockerfile# 自定义该服务创建的容器名称container_name: hmall# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 8080:8080# 该服务创建的容器加入到指定的网络中networks:- hm-net# 指定服务之间的启动顺序指定的mysql服务会在当前hmall服务启动之前启动depends_on:- mysql# 定义服务3nginx服务—自定义服务名即可nginx:# image: 镜像名:版本号image: nginx# 自定义该服务创建的容器名称container_name: nginx# 主机端口:容器端口 将主机端口映射到容器对应端口ports:- 18080:18080- 18081:18081# 将本地目录或文件挂载到容器内的目录或文件volumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/html:/usr/share/nginx/html# 指定服务之间的启动顺序指定的mysql服务会在当前hmall服务启动之前启动depends_on:- hmall# 该服务创建的容器加入到指定的网络中networks:- hm-net# 定义网络
networks:# 定义网络别名hm-net:# 定义网络名称name: hmallDocker Compose基本命令 docker compose [OPTIONS] [COMMAND] 类型参数或指令说明Options-f指定compose文件的路径和名称Options-p指定project名称。project就是当前compose文件中设置的多个service的集合是逻辑概念Commandsup创建并启动所有service容器Commandsdown停止并移除所有容器、网络Commandsps列出所有启动的容器Commandslogs查看指定容器的日志Commandsstop停止容器Commandsstart启动容器Commandsrestart重启容器Commandstop查看运行的进程Commandsexec在指定的运行中容器中执行命令
Docker私有仓库 Docker官方的Docker hub是一个用于管理公共镜像的仓库我们可以从上面拉取镜像到本地也可以把自己的镜像推送上去。但是有时候我们的服务器无法访问互联网或者不希望将自己的镜像放到公网当中这就需要搭建自己的私有仓库来存储和管理自己的镜像了 搭建私有仓库 Step1 从Docker Hub拉取私有仓库registrydocker pull registry Step2 创建并启动私有仓库容器docker run -id –nameregistry -p 5000:5000 registry Step3 浏览器输入私有仓库的ip地址:映射的端口号/v2/_catalog测试是否成功 {repositories:[]}表示私有仓库由于现在并未向私有仓库推送镜像所以为空 Step4 修改/ect/docker目录下的daemon.json文件vim /etc/docker/daemon.json etc目录与root目录同级所以直接/etc即可 在deamon.json文件中添加私有仓库服务器的ip以及端口号{insecure-registries:[私有仓库服务器ip:端口号]}—以此来让Docker信任该私有仓库 {builder: {gc: {defaultKeepStorage: 20GB,enabled: true}},experimental: false,registry-mirrors: [https://st5sw75p.mirrorcgrs572.aliyuncs.com,https://docker.registry.cyou,https://docker-cf.registry.cyou,https://dockercf.jsdelivr.fyi,https://docker.jsdelivr.fyi,https://dockertest.jsdelivr.fyi,https://mirror.aliyuncs.com,https://dockerproxy.com,https://mirror.baidubce.com,https://docker.m.daocloud.io,https://docker.nju.edu.cn,https://docker.mirrors.sjtug.sjtu.edu.cn,https://docker.mirrors.ustc.edu.cn,https://mirror.iscas.ac.cn,https://docker.rainbond.cc],insecure-registries: [192.168.10.131:5000]
}Step5 重启Docker服务systemctl restart docker Step6 启动私有仓库容器docker start registry
上传镜像到私有仓库 以CentOS7镜像为例 Step1 将镜像标记为私有仓库的镜像docker tag 镜像名:镜像版本号 私有仓库服务器ip:5000/镜像名:镜像版本号 Step2 上传标记的镜像到私有仓库docker push 私有仓库服务器ip:5000/镜像名:镜像版本号 Step3 浏览器输入私有仓库的ip地址:映射的端口号/v2/_catalog测试是否成功 注意 为方便后续私有仓库拉取镜像所以此处会将本地centos7私有镜像删除 此时centos7私有镜像的id与centos7镜像的id一样所以要想删除centos7私有镜像则必须为docker rmi 私有镜像名:版本号—版本号不可省略如下所示 docker rmi 192.168.10.131:5000/centos:7私有仓库拉取镜像 直接使用docker pull 私有仓库服务器ip:5000/镜像名:镜像版本号
- 上一篇: 重庆营销型网站开发网络公司企业网站源码
- 下一篇: 重庆怎么在网站上做广告建网页要钱吗
相关文章
-
重庆营销型网站开发网络公司企业网站源码
重庆营销型网站开发网络公司企业网站源码
- 技术栈
- 2026年03月21日
-
重庆营销网站建设下载安装微信app
重庆营销网站建设下载安装微信app
- 技术栈
- 2026年03月21日
-
重庆一站式建设网站平台顺德o2o网站建设
重庆一站式建设网站平台顺德o2o网站建设
- 技术栈
- 2026年03月21日
-
重庆怎么在网站上做广告建网页要钱吗
重庆怎么在网站上做广告建网页要钱吗
- 技术栈
- 2026年03月21日
-
重庆长寿网站设计公司推荐wordpress主题 圆角
重庆长寿网站设计公司推荐wordpress主题 圆角
- 技术栈
- 2026年03月21日
-
重庆整站优化的电话销售宁波网页
重庆整站优化的电话销售宁波网页
- 技术栈
- 2026年03月21日
