介绍
核心问题
1.Docker的五大核心组件 #镜像、容器、镜像仓库、客户端、守护进程(服务端,监控docker容器运行的状态)
2.docker的常用操作命令
3.docker的状态 # 三种: created创建 up运行 exited关闭
4.什么是镜像 #用于存储容器的地方
5.容器与镜像的区别 #镜像可以创造很多容器 容器有状态 镜像无状态
6.add与copy的区别 #add只拷贝不解压 copy是拷贝并解压
7.如何创建私有仓库
8.docker的网络模式 #bridge host none container 默认使用brige
9.容器两个特点 # 1.容器之间性能开销低 2.容器之间相互隔离
none:Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。
container:这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。
定义:开源,流行的容器技术
作用:可以移植代码和环境,规避环境不同导致代码不可运转
使用场景:1.开发,测试,生产过程中环境迁移
2.自动化运维 DevOps,GitOps, AIOps
war包放在tomcat自定义路径,怎么指定告诉他war包在哪儿?
特点:1.容器完全使用沙箱机制,相互隔离。类似于事务。
2.容器性能开销低,因为有使用到系统自带的功能
Docker安装
环境要求:1.CentOs7 以上
2.联网
# 1、yum 包更新到最新
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
Docker架构
daemon : 守护进程,监控容器的运行状态
docker客户端:用于操作docker的客户端
image镜像:docker容器运行的程序包
repository镜像仓库:存放镜像程序包
container容器:docker镜像运行后的状态
注意:安装好docker,守护进程和客户端自动存在
Docker指令
hub.docker.com 官方网址 : 搜索想要的软件的镜像版本等
国内加速器
此处演示 阿里云
步骤:
1.进入阿里云官网,登录
2.找到容器镜像服务(搜索可得)
3.镜像加速器
4.选择Centos系统,即可获得一个免费的、属于自己的镜像加速器。
快速拉取镜像方式
(如果下载镜像的时候慢需要使用此方式配置)
1.sudo mkdir -p /etc/docker
2.sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://m01cirw2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
服务管理命令6个
启动docker: systemctl start docker
重启: systemctl restart docker
停止 : systemctl stop docker
查看状态: systemctl status docker
开机自启: systemctl enable dockerp
开机不自启: systemctl disable docker
Linux防火墙服务管理命令6个
注意:如果出现问题,先关闭防火墙再测试。与docker通用
- systemctl start firewalld 启动
- systemctl stop firewalld 停止
- systemctl restart firewalld 重启
- systemctl status firewalld 查看状态
- systemctl enable firewalld 设置开启启动
- systemctl disable firewalld 设置开启不自动启动
增删查镜像管理命令6个
本地查看镜像文件: docker images
查看所有镜像的ID:docker images -q
查看网络中某个镜像程序:docker search 镜像名称(公有仓库查看)
拉去镜像:docker pull 镜像名称
删除某个镜像:docker rmi 【镜像名称,镜像名称:镜像版本,镜像ID】
删除所有镜像:docker rmi docker images -q
查出所有镜像(此处标识符被隐藏)
上传镜像到远程仓库:docker push
设置镜像名称:docker tag 镜像名称:版本 笔记中有,记得看
容器命令
容器: 在镜像被运行的时候 ,就是容器。
使用容器
1.守护式/后台运行:docker run -id --name=自定义容器名 镜像名:版本 /bin/bash(可省) 【生产时使用】
2.交互式/退出关闭:docker run -it --name=自定义容器名 镜像名:版本 /bin/bash(可省) 【检查测试时使用】
例:docker run -it --name=c2 centos:7
-i 保持容器运行
-d 退出后容器不关闭
-t 退出后容器关闭
退出,启动,查看容器
查看正运行的容器: docker ps
查看历史和正运行的容器 : docker ps -a 【 up :正运行 exited :已退出】
进入守护式容器:docker exec -it 容器名字 /bin/bash
启动容器 : docker start -i 容器名 (-i : 启动容器时,同时显示日志)
停止容器: docker stop 容器名
重启容器:docker restart 容器名
查看容器的详细信息:docker inspect 容器名 (ip,端口,网络等)
删除容器
正开启的容器不可以被删除
删除单个容器: docker rm 容器名1 ,容器名2,容器名3,容器名4,
删除所有容器容器:docker rm `docker ps -aq` (此处标识符被隐藏)
监控日志指令
命令格式:
$ docker logs [选项] 容器名
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
例子:
查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID
查看最近30分钟的日志:
docker logs --since 30m CONTAINER_ID
查看某时间之后的日志:
docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
查看某时间段日志:
docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
当进入容器后,使用exit退出,如果在linux中退出那么是退出系统!
数据卷
挂载:多系统中,可以将某系统中的文件挂在到其他系统,供其他系统访问。这个过程称为挂载
数据卷特性
1.一个数据卷可以被多个容器同时挂载
2.一个容器可以挂载多个数据卷
3.当容器目录和数据卷绑定后,会同步修改。增删也会同步
数据卷作用:
1.在宿主机中使容器中的数据持久化。
1)类似sql数据
2)临时的重要数据
宿主机定义:docker安装在哪个机器上那个机器使宿主机
2.使外部机器和容器通信
3.容器之间数据交换
配置数据卷
-
启动容器时进行配置绑定关系和路径
docker run -it/-id -v 本地目录:容器目录 -v 本地目录:容器目录 .. 挂载多个目录 //意思是本地目录 如/root/data 与 容器目录/root/container 形成数据卷之后,那么都可以进行访问和增删改文件。
注意事项:
1.如果配置的地址没有对应文件,自动创建
2.目录必须使绝对路径
3.可以挂载多个
使用场景: 集群的日志管理同步到数据卷
移动命令
-
- 从主机拷贝到容器 docker cp ./文件名 容器名:/对应要移动的容器中文件的位置 - 从容器拷贝到主机 docker cp 容器名:/对应要移动的容器中文件的位置 /目的地
数据卷容器
创建数据卷容器: 其他容器可以继承这个容器,父容器报错后,子容器依然可以继续挂载到对应的数据卷中
作用:当某一个数据卷下挂载太多,那么为了方便就可以直接继承这个数据卷容器
原理图:
Docker创建时的参数
-
-v 挂载本地文件夹到容器中
- 可以挂载多个目录
dockerrun -d -v 本地目录:容器目录 -v 本地目录:容器目录 -v 本地目录:容器目录 --name=c1 镜像名称 # 下面省去了宿主机的目录,docker会自动创建一个宿主机目录与之挂载 docker run -it --name c3 -v /volume centos
-
-volume-from 复制容器的-v参数到当前容器中
docker run -it --name c3 -v /volume:/volume centos docker run -it --name c1 -v /volume:/volume centos docker run -it --name c2 -v /volume:/volume centos
-
-p 端口映射
-
-e 配置系统的环境,可配置多个(environment)
Docker 应用部署
查看当前docker的ip地址
ip addr show docker0 查看当前docker的ip地址 172.17.0.1
一、部署MySQL
连接的时候使用 Linux的ip地址查找mysql,其他软件则要使用docker的ip查找
- 搜索mysql镜像
docker search mysql
- 拉取mysql镜像
docker pull mysql:5.7
-
创建容器,设置端口映射、目录映射
注意,密码不再是root,此处已经设置为了root
$PWD:作用,代替该文件的绝对路径,到达这一层
如:/root/mysql/conf:/etc/mysql/conf.d \
代替之:$PWD/conf:/etc/mysql/conf.d \
# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \ //映射端口:docker暴露端口
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \ //将这些配置文件挂载到linux中,因docker中不支持修改
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \ //固定值,配置系统的环境变量,访问时的密码 账户依然为root
mysql:5.7
如果显示format有误就使用这种。(设置数据卷)
docker run -it -p 3307:3306 --name=c_mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#注意:不同的软件,环境变量不一致。具体在docker hub官网查找
- 参数说明:
- -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
- **-e MYSQL_ROOT_PASSWORD=123456:**初始化 root 用户的密码。
- 进入容器,操作mysql
docker exec -it c_mysql /bin/bash
- 使用外部机器连接容器中的mysql
启动sql
docker run -it --name=c_mysql mysql:5.7 /bin/bash //执行sql镜像
docker exec -it ccc /bin/bash //进入应用程序
mysql -h localhost -u root -p //账户密码输入 ,回车后提示输入密码
验证成功后就可以访问sql,注意:语句要以;结尾
二、部署Tomcat
部署项目的注意事项:
1.war包要以ROOT.war来定义
2.要将业务层也拖进来,可以不改名字
3.连接数据库是使用的Linux的ip ,其余软件用docker的ip(优先使用Linux的ip)
- 搜索tomcat镜像
docker search tomcat
- 拉取tomcat镜像
docker pull tomcat
-
创建容器,设置端口映射、目录映射
要进入到tomcat后再来运行,否则识别不了
设置的项目文件名要以root命名,作为根目录
否则必须要加上对应的文件名,否则不能访问
根目录只能存放war包,jar包无效
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \ //指定的端口号写错了,需要重启后修改。
-v $PWD:/usr/local/tomcat/webapps \ //存放项目文件的根目录
tomcat //指定镜像
# 根目录/ROOT/ : 数据卷的位置就是项目的根位置,是tomcat的默认目录
如果显示format有误就使用这种。连成一句话
docker run -id --name=c_tomcat -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps tomcat
-
参数说明:
-
**-p 8080:8080:**将容器的8080端口映射到主机的8080端口
**-v $PWD:/usr/local/tomcat/webapps:**将主机中当前目录挂载到容器的webapps
-
- 使用外部机器访问tomcat
三、部署Nginx
- 搜索nginx镜像
docker search nginx
- 拉取nginx镜像
docker pull nginx
- 创建容器,设置端口映射、目录映射
# 在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf
cd conf
# 在~/nginx/conf/下创建nginx.conf文件,粘贴下面内容
vim 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 on;
include /etc/nginx/conf.d/*.conf;
}
执行前必须要退到nginx的目录
docker run -id --name=c_nginx \
-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
docker run -id --name=c_nginx -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
- 参数说明:
- -p 80:80:将容器的 80端口映射到宿主机的 80 端口。
- -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机当前目录下的 /conf/nginx.conf 挂载到容器的 :/etc/nginx/nginx.conf。配置目录
- -v $PWD/logs:/var/log/nginx:将主机当前目录下的 logs 目录挂载到容器的/var/log/nginx。日志目录
- 使用外部机器访问nginx
四、部署Redis
- 搜索redis镜像
docker search redis
- 拉取redis镜像
docker pull redis:5.0
- docker中创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
- 在cmd中打开win中安装redis的文件位置
- 使用外部机器连接redis
redis-cli.exe -h 192.168.93.133 -p 6379
五、部署zookeeper
安装
docker pull zookeeper
启动
docker run -d --name zookeeper --publish 2181:2181 -d zookeeper
这里可以加上-p参数把端口映射到主机端口:
docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper 开机自启
docker镜像生成的两种方式
1、docker镜像管理命令
容器转镜像
docker commit 容器id 镜像名称:版本号 提交为镜像(可以在images中查看)
docker save -o 自定义压缩包名 镜像名称:版本号 在当前目录生成一个镜像的压缩包.tar
docker load -i 上面的压缩包名 将tar包恢复为镜像
2、DockerFile
docker原理:文件堆叠复用,所以才会这么小【bootfs–> rootfs–>jdk–>tomcat】
作用:制作dock镜像的方式,是一个文本文件。
比如:在docker中不可以使用vim,制作DockerFile文件来生成镜像文件,然后编译执行。
案例1:
案例2:
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20200809" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-08-09 00:00:00+01:00"
CMD ["/bin/bash"]
DockerFile特性
• Dockerfile 是一个文本文件
• 包含了一条条的指令
• 每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
• 对于开发人员:可以为开发团队提供一个完全一致的开发环境 • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件 构建一个新的镜像开始工作了
• 对于运维人员:在部署时,可以实现应用的无缝移植
编译运行dockerfile
-f : 指定当前dockerfile的路径
-t : 设置映射的地址和版本
docker build -f ./该dockerfile文件名 -t 新名字 :版本号 . (此处有一个点,表示寻址路径) 名字要全部小写
# 如果文件名就是dockerfile,那么可以省略-f 指定文件名
# 在当前dockefile存在的路径执行该命令
基于centos创建jdk并且执行项目jar包
方式一:
1 FROM centos:7
2 # 添加压缩包
3 ADD ./jdk-8u202-linux-x64.tar.gz /root/jdk/
4
5 #设置环境变量
6 ENV JAVA_HOME=/root/jdk/jdk1.8.0_202
7 ENV CLASSPATH=.:$JAVA_HOME/lib # jdk1.8以后不需要配置
8 ENV PATH=$JAVA_HOME/bin:$PATH
9 # 添加jar包到镜像文件中去
10 ADD ./dt-0.0.1-SNAPSHOT.jar /root/jdk/
11 # 在镜像文件中使用jar包
12 CMD java -jar /root/jdk/dt-0.0.1-SNAPSHOT.jar
方式二:
FROM centos:7
MAINTAINER miukoo
RUN mkdir -p /usr/java
ADD ./jdk-8u202-linux-x64.tar.gz /usr/java
ENV JAVA_HOME=/usr/java/jdk1.8.0_202
ENV PATH=$JAVA_HOME/bin:$PATH
COPY ./eureka-server-1.0-SNAPSHOT.jar /usr/java/
RUN mv /usr/java/eureka-server-1.0-SNAPSHOT.jar /usr/java/app.jar
CMD java -jar /usr/java/app.jar
DockerFile指令
# ADD指令 :将某一文件添加到 自定义镜像地址中
如:ADD ./jdk-8u202-linux-x64.tar.gz /root/jdk/
#CMD指定:运行某一镜像文件
如:1.CMD java -jar /root/jdk/dt-0.0.1-SNAPSHOT.jar
2.CMD["java","-jar","./xx.jar"]
关键字 | 作用 | 重要程度 | 备注 |
---|---|---|---|
FROM | 指定父镜像 | 必要 | 指定dockerfile基于那个image构建 |
MAINTAINER | 作者信息 | 要 | 用来标明这个dockerfile谁写的 |
LABEL | 标签 | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 | |
RUN | 执行命令 | 要 | 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”] 使用Linux指令 |
CMD | 容器启动命令 | 要 | 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”] |
ENTRYPOINT | 入口 | 一般在制作一些执行就关闭的容器中会使用 | |
COPY | 复制文件 | 要 | build的时候复制文件到image中 |
ADD | 添加文件 | 要 | build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服,要指定添加路径 以/结尾 |
ENV | 环境变量 | 要 | 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value |
ARG | 构建参数 | 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 | |
VOLUME | 定义外部可以挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”] | |
EXPOSE | 暴露端口 | 要 | 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工作目录 | 要 | 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 |
USER | 指定执行用户 | 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 | |
HEALTHCHECK | 健康检查 | 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 | |
ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 | |
STOPSIGNAL | 发送信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 | |
SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell |
服务编排
运维技术,由于一个项目需要运行多个镜像。每个镜像挨个去拉去,容器的开启删除停止,过于繁琐。
所以出现服务编排的概念:按照一定的业务规则批量管理容器
docker compose
docker compose安装
# Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统的/usr/local/bin/docker-compose路径中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version
docker compose卸载
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
使用docker compose编排nginx+springboot项目
- 创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
-
编写 docker-compose.yml 文件
文件名字必须是docker-compose.yml
version: '3' #指定语法版本可用关键字。3~3.7
services: #定义多个服务
nginx: # nginx/app是服务名称
image: nginx #指定基础镜像名称(:版本可省略)
ports: #指定端口 -p
- 80:80
links: #指定服务可直接访问的容器列表。必须与下面的app名字一致
- app
volumes: #挂载文件目录 类似于 docker的 -v 指令
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose: #暴露端口 与-p:8080:8080
- "8080"
====================================================
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
- "8080"
- 创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d //创建多级目录需要使用 -p
- 在./nginx/conf.d目录下 编写vim 一个 itheima.conf文件(反向代理的配置,通过link来指定的)
server {
listen 80; //监听80端口
access_log off; //关闭日志
location / {
proxy_pass http://app:8080; //当访问80端口时,自动访问对应的挂载app 8080端口
}
}
====================================================
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
-
在~/docker-compose 目录下 使用docker-compose 启动容器
注意:要进入到~/docker-compose下执行!
docker-compose up //创建容器并启动一组容器 (-d 后台启动),此处查看效果可以不加 -d
docker-compose down //停止并删除一组容器
docker-compose stop //停止
docker-compose start //启动
- 测试访问
http://192.168.149.135/hello
docker私有仓库
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
上传
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
配置文件地址 /etc/docker/daemon.json
拉取
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7 没有【私有仓库服务器ip:5000/】那么默认从共有仓库获取
docker与虚拟机的区别
特性 | docker | Linux |
---|---|---|
启动服务 | 秒 | 钟 |
硬盘使用 | MB | GB |
性能 | 原生 | 稍弱 |
系统支持量 | 几千个容器 | 几十个系统 |
tp://192.168.149.135/hello
# docker私有仓库
```shell
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
上传
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
配置文件地址 /etc/docker/daemon.json
拉取
#拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7 没有【私有仓库服务器ip:5000/】那么默认从共有仓库获取
docker与虚拟机的区别
特性 | docker | Linux |
---|---|---|
启动服务 | 秒 | 钟 |
硬盘使用 | MB | GB |
性能 | 原生 | 稍弱 |
系统支持量 | 几千个容器 | 几十个系统 |