Files
notes_estom/docker/6 DockerFile.md
2022-10-10 21:10:35 +08:00

8.3 KiB
Raw Blame History

Dockerfile

1 DockerFile介绍

dockerfile是用来构建docker镜像文件命令参数脚本

构建步骤

  1. dockerfile
  2. docker build 构建一个镜像
  3. docker run 运行镜像
  4. docker push 发布一个镜像

dockerhub官方的镜像会对应到github上一个仓库中的Dockerfile

2 DockerFile构建过程

指令

FROM 基础镜像
MAINTAINER 镜像的维护者信息
RUN Docker镜像构建的时候需要的命令
ADD 步骤tomcat的镜像中tomcat的压缩包
WORKDIR 镜像的工作目录
VOLUME -v挂载的目录位置
EXPOSE -p暴露端口


CMD 指定这个容器启动的时候运行的命令,只有最后一个会生效,而且可悲替代
ENTRYPOINT 指定这个容器启动的时候运行的命令,可以追加命令
ONBUILD 当构建一个被继承的DockerfileFile就会影响ONBUILD指令。触发指令
COPY 类似ADD命令将文件COPY到镜像中。
ENV 构建的时候设置环境变量
  1. 每个保留关键字指令都是大写字母
  2. #表示注释
  3. 每一个指令都会创建提交一个新的镜像层,并提交

构建过程

dockerfile是面向开发的发布项目、做镜像需要编写dockerfile。

  • DockerFile构建文件定义了一切的步骤、源代码
  • DockerImages通过DockerFile构建生成的镜像最终发布和运行的产品
  • Docker容器容器就是镜像运行起来提供服务器

实践创建自己的centos

docker hub 中99%镜像都是从FROM scratch

  1. 编写dockerfile的文件
➜  dockerfile git:(master) ✗ cat mydockerfile        
FROM centos
MAINTAINER yinkanglong<yinkanglong.163.com>


ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools


EXPOSE 80

CMD echo $MYPATH
CMD echo "----end----"

CMD /bin/bash
  1. docker builid 运行镜像
dockerfile git:(master) ✗ docker build -f mydockerfile -t mycentos:0.1 .
[+] Building 64.0s (8/8) FINISHED                                                                                                
 => [internal] load build definition from mydockerfile                                                                      0.2s
 => => transferring dockerfile: 265B                                                                                        0.1s
 => [internal] load .dockerignore                                                                                           0.1s
 => => transferring context: 2B                                                                                             0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                 4.5s
 => [1/4] FROM docker.io/library/centos:7@sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407          20.6s
 => => resolve docker.io/library/centos:7@sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407           0.0s
 => => sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407 1.20kB / 1.20kB                              0.0s
 => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                                  0.0s
 => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                              0.0s
 => => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB                           15.0s
 => => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc                                   5.3s
 => [2/4] WORKDIR /usr/local                                                                                                0.6s
 => [3/4] RUN yum -y install vim                                                                                           21.9s
 => [4/4] RUN yum -y install net-tools                                                                                      9.3s
 => exporting to image                                                                                                      6.1s 
 => => exporting layers                                                                                                     6.1s 
 => => writing image sha256:87b7be8e41c9cc237c733930df0513f40a708fb0944f5ef48e815979e6880ee2                                0.0s 
 => => naming to docker.io/library/mycentos:0.1                                                                             0.0s 
                                                                                                                                 
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them                             
  1. 测试运行docker run验证了 vim和ifconfig命令可行
dockerfile git:(master) ✗ docker run -it mycentos:0.1    
[root@f318e4ba01b3 local]# pwd
/usr/local
[root@f318e4ba01b3 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 10  bytes 876 (876.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@f318e4ba01b3 local]# vim where
[root@f318e4ba01b3 local]# which vim
/usr/bin/vim

实践CMD和ENTRYPOINT

实践制作tomcat镜像

发布自己的镜像

DockeHub

  1. https://hub.docker.com创建账号
  2. 向服务器提交自己的镜像
  3. 登录 docker login -u yinkanglong
  4. 推送 docker push yinkanglong/mycentos:01

发布自己的镜像到阿里云

  1. 登录阿里云

docker save & docker load

将镜像保存压缩包

将压缩包加载为镜像

总结

简介

  • Docker将应用和环境打包成一个镜像
  • 数据?如果数据在容器中,那么我们容器删除,数据就会丢失。需求:数据持久化。
  • 所以Mysql的数据可以存储在本地。
  • 所以:容器间可以有一个数据共享的技术。 Docker容器中产生的数据同步到本地。
  • 这就是卷技术目录挂载将容器内的目录挂载到Linux上。

总结:容器的持久化和同步操作

使用

  • -v 实现文件映射
docker run -it -v 目录映射 -p 端口映射

➜  ~ docker run -it -v /Users/yinkanglong/ceshi:/home centos /bin/bash
  • 使用docker inspect 查看挂载情况mount
    • 同步的过程,是一种双向绑定的过程。

是同步的过程,还是目录挂载到磁盘的同一个位置了?

实战安装Mysql

# 获取镜像
docker pull mysql 5.7

# 运行容器,需要做数据挂载
-d 后台运行
-p 端口映射
-v 卷挂载
--name 容器名字
➜  ~ docker run -d -p 3310:3306 -v /Users/yinkanglong/mysql/conf:/etc/mysql/conf.d -v /Users/yinkanglong/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

# 启动之后链接数据库服务器进行测试
➜  data mysql -h 127.0.0.1 -P 3310 -uroot -p123456

# 在本地测试创建数据库,查看映射路径是否可以
create table

概念原理

docker volume数据卷操作

 create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

  • 查看所有的卷的情况
➜  data docker volume ls    
DRIVER    VOLUME NAME
local     635d632e8d79ad10168a6bd6b65ba5b67de68c38c63b619915b6d00db2bd1b4a
local     0704fe09fca1d196b4d4f1cc14141ba05bae986d03ac1209f63ed1cca3d7bd7c
local     924b3cbb61444c73191a11200c727b52f9ccc17dd27024bce61ba63a33577663

# 这里发现的,就是匿名挂载。

匿名挂载

# 匿名挂载