docker-镜像/容器
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
镜像使用
1、镜像管理命令介绍
docker image
2、镜像获取
2.1 先搜索镜像
docker search <镜像>
2.2 然后下载镜像
docker image pull
3、镜像列表
docker image ls
4、镜像列表基本状态解析
各个选项说明:
- **REPOSITORY:**表示镜像的仓库源
- **TAG:**镜像的标签
- **IMAGE ID:**镜像ID
- **CREATED:**镜像创建时间
- **SIZE:**镜像大小
5、镜像详细
docker image inspect <镜像id>
6、镜像删除
docker image rm <镜像id>
7、镜像删除构建失败的镜像
docker image prune
7.1 清理未使用的镜像
docker image prune -a
7、镜像设置标签,也叫镜像设置版本
docker image tag image:v1 image
8、镜像历史(了解镜像的操作记录)
docker image history [OPTIONS]
9、导出镜像导入导出
8.1 镜像导入
docker image import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
8.2 镜像导入
docker image load [OPTIONS]
Options:
-i, --input string Read from tar archive file, instead of STDIN
-q, --quiet Suppress the load output
8.3 镜像导出,备份
docker image save [OPTIONS] IMAGE [IMAGE...]
容器使用
1、容器命令介绍
docker container
容器的修改和增删
2、运行容器rmcore
docker run rmcore
3、查看容器列表
docker ps -a
3、后台运行rmcore
docker run -d rmcore
-d 后台执行
4、暴露rmcore端口
docker run -d -P rmcore
4.1 自定义端口暴露
docker run -d -p 2020:80 2021:443 rmcore
5、进入容器
docker exec -it rmcore /bin/bash
-i :交互式操作
t : 终端
/bin/bash 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash,就好比xshell一样
5、停止容器
docker stop rmcore
6、启动容器
docker start rmcore
镜像和容器关系
镜像和容器是一对多的关系
镜像和容器区别
1、表面区别
镜像是单例的,容器是多例的
2、本质区别
镜像不可写,容器可写
主要原因是在于镜像基础之上加了一层可写层
总结:
1、快、轻量
2、可移植
3、可持续集成
4、隔离性
5、成本非常低
如何构建自定义仓库
什么是仓库
仓库(Repository)是集中存放镜像的地方
仓库地址
先说明为什么要构建自定义仓库
1、远程仓库地址
下载速度非常慢
使用镜像仓库解决?
2、使用镜像仓库
镜像仓库资源列表
阿里云的加速器:https://help.aliyun.com/document_detail/60750.html
网易加速器:http://hub-mirror.c.163.com
官方中国加速器:https://registry.docker-cn.com
ustc 的镜像:https://docker.mirrors.ustc.edu.cn
1、进入docker 配置目录
cd /etc/docker
请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)
2、创建daemon.json文件,目的配置docker
touch daemon.json
3、 配置镜像仓库
{"registry-mirrors":["https://registry.docker-cn.com"]}
4、 重新启动
service docker restart
5、查询docker配置信息
docker info
6、下载镜像的时候依然会出现很大问题,但是加速镜像无法依然无法进行仓库私有化。
docker pull <镜像:标签>
3、自定义镜像仓库
条件:
1、官网仓库镜像:docker-registry v2.x 版本
2、rmcore镜像
3、两台主机安装docker
1、如何构造私有仓库?
1.1、下载仓库镜像
docker pull registry
1.2、运行仓
下载速度有点慢?
1.3、查看仓库镜像
curl 127.0.0.1:5000/v2/_catalog
2、如何将rmcore镜像上传到仓库?
2.1、设置rmcore 标签
docker image tag rmcore 111.229.181.115:5000/rmcore
2.2、推送到私有仓库
docker push 111.229.181.115:5000/rmcore
2.3、查询私有仓库镜像信息
docker image inspect registry
3、如何在远程设置私有仓库连接?
3.1 远程主机docker配置daemon.json
vi /etc/docker/daemon.json
"insecure-registries": [
"123.57.164.54:5000"
]
3.2 重启远程主机
service docker restart
4、如何下载远程镜像?
4.1 下载rmcore镜像
docker pull 111.229.181.115:5000/rmcore
4.2 查询rmcore镜像
docker image ls
4.2 运行远程镜像
docker run -d -P --name rmcore 111.229.181.115:5000/rmcore
如何构建自定义镜像
方式有两种:
1、使用commit来构建镜像:
commit是基于原有镜像基础上构建的镜像,使用此方法构建镜像的目的:保存镜像里的一些配置信息和修改的信息。相当于一个镜像的快照。
2、使用dockerfile来构建镜像:
dockerfile是快速构建所需(自定义)镜像。
那么我们如何构建自定义镜像呢?
如何构建一个nginx镜像?
条件:
1、准备一个nginx
2、基础镜像Centos7以上
3、Dockerfile文件
4、Linux基本命令操作
1、定义一镜像构建
docker bulid -t 镜像名称 .
参数说明:
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
Dockerfile文件详解
什么是Dockfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Dockerfile文件命令
1、FROM 指定基础镜像构建
FROM 镜像
2、COPY 复制命令。从上下文目录中复制文件或者目录到容器里指定路径。
写法:
COPY 源路径,目标路径
COPY ["源路径","目标路径"]
3、RUN运行指令。构建的时候运行的指令
主要在于镜像构建的时候运行,运行build命令的时候
后面接的命令就是shell输入的命令
写法
RUN shell命令 参数1 参数2
RUN ["shell命令 ","参数1"," 参数2"]
例如:
RUN ["echo",">"," /usr/share/index.html"]
4、CMD运行指令。运行容器时候运行的指令
主要在于镜像运行容器的时候生成,运行run的时候运行
写法
CMD <shell 命令>
CMD ["<可执行文件或命令>","
例如:
CMD ["dotnet","rmcore.dll"]
缺点:在run 命令后面可以进行覆盖
docker run -d -P rmcore dotnet rmcore.dll 进行覆盖掉
5、ENTRYPOINT运行指令。运行容器时候运行的指令(不会被覆盖)
写法
ENTRYPOINT ["
可以和CMD动态结合,设置动态的配置参数
例如
ENTRYPOINT ["nginx", "-c"] 定参
CMD ["/etc/nginx/nginx.conf"]变参
6、EXPOSE暴露端口指令
仅仅声明端口,就是指定镜像暴露的端口
在run 的时候,通过docker run -p 会自动随机映射到EXPOSE端口
写法
EXPOSE 端口
EXPOSE 端口
例如
EXPOSE 5000
EXPOSE 5001
7、WORKDIR工作目录指令
用于应用在容器内的工作目录,就好比:ruanmou目录
写法
WORKDIR <工作目录路径>
例如
WORKDIR /rmcore
或者
WORKDIR /nginx
nginx镜像构造步骤
1、如何安装nginx?
1.1 安装 nginx需要工具
yum -y install gcc make pcre-devel zlib-devel tar zlib
1.2 下载nginx
wget http://nginx.org/download/nginx-1.15.2.tar.gz
1.3 nginx解压/nginx目录
tar -zxvf nginx-1.15.2.tar.gz
1.4 切换到/nginx/nginx-1.15.2
执行./configure
make
make install 进行安装
1.5 切换到/usr/local/nginx/sbin
执行 ./nginx 启动nginx
2、 如何构造Dockerfile?
2.1 创建Dockerfile文件
vi Dockerfile
2.2 配置Dockerfile内容
FROM cento
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
WORKDIR /nginxs
EXPOSE 80
COPY nginx-1.15.2.tar.gz /nginx
RUN tar -zxvf nginx-1.15.2.tar.gz
RUN cd /nginx/nginx-1.15.2 && ./configure && make && make install
CMD ["/bin/bash"]
2.3 构建nginx镜像
docker build -t nginx .
3、如何运行nginx镜像?
3.1 先启动容器
docker run -itd -P nginx
3.2 进入容器,后台启动
docker exec -it -P nginx /bin/bash
3.3 启动nginx
切换 cd /usr/local/nginx 启动 ./nginx
容器镜像扩展
1、 nginx 和 aspnetcore项目之间如何做反向代理呢 ?
使用容器互联来解决
2、如何修改nginx配置?
使用数据挂载来做
3、如何做nginx,aspnetcore集群?
使用docker-swarm
4、nginx和 aspnetcore项目是如何联网的?
使用network来联网