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<[email protected]>

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. 总结

相关推荐
心随_风动13 分钟前
SUSE Linux 发行版全面解析:从开源先驱到企业级支柱
linux·运维·开源
christine-rr36 分钟前
征文投稿:如何写一份实用的技术文档?——以软件配置为例
运维·前端·网络·数据库·软件构建
孔令飞1 小时前
Go 为何天生适合云原生?
ai·云原生·容器·golang·kubernetes
Altairr1 小时前
Docker基础(二)
运维·docker·容器
笑醉踏歌行1 小时前
NVM,Node.Js 管理工具
运维·ubuntu·node.js
happyh h h h p p p p2 小时前
部署DNS从服务器
运维·服务器·网络
烟雨书信3 小时前
Linux中MySQL的逻辑备份与恢复
linux·运维·mysql
藥瓿亭4 小时前
K8S认证|CKS题库+答案| 5.日志审计
linux·运维·docker·云原生·容器·kubernetes·cka
David爱编程4 小时前
Docker 存储卷详解:数据持久化的正确打开方式
后端·docker·容器
家庭云计算专家4 小时前
飞牛云一键设置动态域名+ipv6内网直通访问内网的ssh服务-家庭云计算专家
运维·云计算·ssh·nextcloud·ddns·动态域名解析