Docker基础(二)

文章目录

      • [1. 可视化工具](#1. 可视化工具)
      • [2. Docker镜像详解](#2. Docker镜像详解)
        • [2.1 镜像commit](#2.1 镜像commit)
      • [3. 容器数据卷](#3. 容器数据卷)
        • [3.1 使用数据卷](#3.1 使用数据卷)
        • [3.2 安装mysql实操案例](#3.2 安装mysql实操案例)
        • [3.3 Dockerfile挂载数据卷](#3.3 Dockerfile挂载数据卷)
        • [3.4 具名挂载和匿名挂载](#3.4 具名挂载和匿名挂载)
        • [3.5 数据卷容器](#3.5 数据卷容器)
      • [4. DockerFile](#4. DockerFile)
        • [4.1 构建一个自己的centos](#4.1 构建一个自己的centos)
        • [4.2 编写DockerFile步骤](#4.2 编写DockerFile步骤)
      • [5. 发布镜像](#5. 发布镜像)
        • [5.1 共有仓库](#5.1 共有仓库)
        • [5.2 私有仓库](#5.2 私有仓库)
      • [6. 总结](#6. 总结)

1. 可视化工具

bash 复制代码
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
bash 复制代码
# 提交镜像的副本,让这个容器产生一个新的镜像
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 使用数据卷
bash 复制代码
# /宿主机路径:/容器路径
# 会自动创建对应的文件夹
docker run -it -v /home/ceshi:/root centos bin/bash
bash 复制代码
# 查看"Mounts"部分内容可看到关联情况
docker inspect 容器id

删除容器后数据依旧存在

容器再次重新挂载回来,容器内包含原来的数据

3.2 安装mysql实操案例
bash 复制代码
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镜像的构建文件,是由一些列命令和参数构成的脚本。

bash 复制代码
# 编辑内容
vim dockerfile1
# 构建成一个镜像
# -t 输出的镜像名 . 代表执行
docker build -f dockerfile1 -t zxs/centos .
# 基于镜像新建运行一个容器
docker run -it zxs/centos /bin/bash
3.4 具名挂载和匿名挂载
bash 复制代码
# 指定目录挂载
# -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启动两个容器,容器内的数据挂载不互通

数据卷容器:容器之间的数据是可以继承的(父-子)

bash 复制代码
# 启动一个容器
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
bash 复制代码
# 阿里云官方的centos不完整很多命令工具没有
vim dockerfile-mycentos
bash 复制代码
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----"
bash 复制代码
# 构建自己的镜像
-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

bash 复制代码
docker login --help
bash 复制代码
docker login -u zsq
bash 复制代码
# 上传之前打标签
docker tag 镜像id zsq/tomcatnew:1.0
# 上传
docker push zsq/tomcatnew:1.0
bash 复制代码
docker logout
5.2 私有仓库

可以使用阿里云镜像服务

镜像加速器:https://cr.console.aliyun.com/cn-beijing/instances/mirrors

个人镜像服务实例:https://cr.console.aliyun.com/cn-beijing/instances

6. 总结

相关推荐
Java程序员威哥1 分钟前
云原生Java应用优化实战:资源限制+JVM参数调优,容器启动快50%
java·开发语言·jvm·python·docker·云原生
大房身镇、王师傅2 分钟前
【Docker】RockyLinux10 安装 docker-compose
运维·docker·容器·docker-compose·rockylinux10
济6177 分钟前
linux 系统移植(第九期)----Linux 内核顶层 Makefile- make xxx_defconfig 过程-- Ubuntu20.04
linux·运维·服务器
宴之敖者、8 分钟前
Linux——yum和vim
linux·运维·服务器
开开心心_Every16 分钟前
网络管理员IP配置工具:设置多台电脑地址
运维·服务器·网络·网络协议·学习·tcp/ip·edge
时空无限17 分钟前
网络包匹配路由的原则是啥 从 01 与啥的运算讲起
运维·服务器·网络
一位不知名民工19 分钟前
python3从入门到精通(五): pyhhon协程之asyncio模块(异步IO)(一)
运维·python
大柏怎么被偷了24 分钟前
【Linux】信号
linux·运维·服务器
Jia ming32 分钟前
大小端模式:字节顺序的奥秘
linux·运维·服务器
Zach_yuan37 分钟前
Linux 线程入门到理解:从 pthread 使用到线程库底层原理
linux·运维·服务器