文章目录
- 1. 可视化工具
- 2. Docker镜像详解
- 2.1 镜像commit
- 3. 容器数据卷
- 3.1 使用数据卷
- 3.2 安装mysql实操案例
- 3.3 Dockerfile挂载数据卷
- 3.4 具名挂载和匿名挂载
- 3.5 数据卷容器
- 4. DockerFile
- 4.1 构建一个自己的centos
- 4.2 编写DockerFile步骤
- 5. 发布镜像
- 5.1 共有仓库
- 5.2 私有仓库
- 6. 总结
1. 可视化工具
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
2. Docker镜像详解
docker镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需要的所有内容,包含代码、运行时、库、环境变量和配置文件。
Docker镜像下载时分层下载,不同镜像会复用一些底层的文件。
在修改容器内容重新生成一个image时会以追加的方式在原来的image基础上追加新的内容,可以通过docker inspect 镜像id
的方式查看,具体的追加内容在"RootFS"部分。
2.1 镜像commit
# 提交镜像的副本,让这个容器产生一个新的镜像
docker commit
-m="提交的信息"
-a="作者"docker run -it tomcatdocker exec -it 容器id /bin/bash修改内容docker commit -a="zxs" -m="tomcat1" 容器id zxstomcat:1.0
3. 容器数据卷
将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对于数据的要求是希望能够持久化的!
所以我么希望容器之间有可能可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的image,使得数据持久化存储下来,那么当容器删除后,数据也没有了,这样是不合理的!
为了能够使得docker中的数据持久化存储下来我们可以使用卷!让数据挂载到本地!这样数据就不会因为容器删除而丢失!
容器数据卷:容器的持久化,以及容器间的继承和数据共享!
3.1 使用数据卷
# /宿主机路径:/容器路径
# 会自动创建对应的文件夹
docker run -it -v /home/ceshi:/root centos bin/bash
# 查看"Mounts"部分内容可看到关联情况
docker inspect 容器id
删除容器后数据依旧存在
容器再次重新挂载回来,容器内包含原来的数据
3.2 安装mysql实操案例
docker pull mysql:5.7docker run -d -p 3310:3306 \
-v /home/mysql/conf:/etc/mysql/conf.d \
-v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql01 \
mysql:5.7
3.3 Dockerfile挂载数据卷
DockerFile是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本。
# 编辑内容
vim dockerfile1
# 构建成一个镜像
# -t 输出的镜像名 . 代表执行
docker build -f dockerfile1 -t zxs/centos .
# 基于镜像新建运行一个容器
docker run -it zxs/centos /bin/bash
3.4 具名挂载和匿名挂载
# 指定目录挂载
# -v 宿主机目录:容器内目录# 匿名挂载
# -v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx# 匿名挂载的缺点就是不好维护,通常使用命令docker volume维护
docker volume ls# 具名挂载
# 其实相当于对匿名挂载的卷名自定义一个名字
# -v 卷名:/容器内路径
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx
# 查看卷目录
docker volume ls
# 查看卷的元数据信息
docker volume inspect nginxconfig
3.5 数据卷容器
容器数据卷:容器的持久化
数据卷容器:是一个容器,当作一个持久化的卷
如果基于同一个image启动两个容器,容器内的数据挂载不互通
数据卷容器:容器之间的数据是可以继承的(父-子)
# 启动一个容器
docker run -it --name docker01 xxb/centos
# 基于docker01启动一个容器,会基于dockers01中数据卷的内容
# 实现多个相同容器共享数据,将容器作为一个父数据卷,
# 其他容器来挂载到这个父数据卷实现共享
docker run -it --name docker02 --volumes-from docker01 xxb/centos
# 启动docker03
docker run -it --name docker03 --volumes-from docker01 xxb/centos
# 停止或者删除docker01不会影响docker02,docker03
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止
存储在本机的文件则会一直保留
4. DockerFile
Nginx,Mysql这些镜像的来源是啥呢?
流程:开发应用=>DockerFile=>打包成镜像=>上传到仓库=>下载镜像=>启动运行
DockerFile是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本。
构建步骤:
1、编写DockerFile文件
2、docker build 构建镜像
3、docker run
4.1 构建一个自己的centos
# 阿里云官方的centos不完整很多命令工具没有
vim dockerfile-mycentos
FROM centos
MAINTAINER zsq<2635718400@qq.com>ENV MYPATH /usr/local
WORKDIR $MYPATH# 在基础的centos基础上安装vim net-tools
RUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "------end----"
# 构建自己的镜像
-f 指定dockerfile文件
-t 输出的镜像文件名:版本号
. 执行docker build -f dockerfile-mycentos -t mycentos:1.0 .
一般一个项目都在一个文件夹中,我们需要在项目目录下编辑一个Dockerfile文件即可,build不需要-f来指定,默认寻找项目目录下的Dockerfile文件来构建镜像。
4.2 编写DockerFile步骤
- 基于一个空的镜像
- 下载需要的环境 ADD
- 复制宿主机文件到容器内 COPY
- 执行环境变量的配置 ENV
- 配置工作目录 WORKDIR
- 执行一些Linux命令 RUN
- 日志CMD
- 端口暴露 EXPOSE
- 挂载数据卷 VOLUMES
这个过程就是部署项目的过程,可以通过dockerfile自动化构建。
可以通过docker history imageid
可以查看镜像如何构建
5. 发布镜像
5.1 共有仓库
注册dockerhub
https://hub.docker.com/signup
docker login --help
docker login -u zsq
# 上传之前打标签
docker tag 镜像id zsq/tomcatnew:1.0
# 上传
docker push zsq/tomcatnew:1.0
docker logout
5.2 私有仓库
可以使用阿里云镜像服务
镜像加速器:https://cr.console.aliyun.com/cn-beijing/instances/mirrors
个人镜像服务实例:https://cr.console.aliyun.com/cn-beijing/instances