Docker基础(二)

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 tomcat

docker 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.7

docker 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-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "------end----"
# 构建自己的镜像
-f 指定dockerfile文件
-t 输出的镜像文件名:版本号
. 执行

docker build -f dockerfile-mycentos -t mycentos:1.0 .

一般一个项目都在一个文件夹中,我们需要在项目目录下编辑一个Dockerfile文件即可,build不需要-f来指定,默认寻找项目目录下的Dockerfile文件来构建镜像。

4.2 编写DockerFile步骤
  1. 基于一个空的镜像
  2. 下载需要的环境 ADD
  3. 复制宿主机文件到容器内 COPY
  4. 执行环境变量的配置 ENV
  5. 配置工作目录 WORKDIR
  6. 执行一些Linux命令 RUN
  7. 日志CMD
  8. 端口暴露 EXPOSE
  9. 挂载数据卷 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

6. 总结

image.png

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值