Dockerfile 和docker-compose

1.作用

Dockerfile:使用dockerfile创建一个属于自己的镜像

docker-compose:对多个容器进行编排

2.构建步骤

2.1在指定位置创建一个dockerfile文件

使用一定的语法

2.2通过dockerfile构建一个镜像

docker build -t aa:1.0 .(.指定dockerfile所在位置,.代表目前所在位置)

在构建镜像时候 Dockerfile所在文件夹所有的文件都会被上传,所以尽量删除无关文件

2.3 Dockerfile常用命令 

每个关键字都需要大写

1.FROM指令一定是Dockerfile中非注释行的第一个指令,为基础镜像,后续的指令运行于 此基础镜像之上

FROM [:] 

2.MAINTAINER 维护者信息  已经废弃不再使用

MAINTAINER 

3. 主机复制新文件或者目录至创建的新镜像指定路径中

COPY 宿主机路径 镜像路径

4.类似于COPY ,ADD支持使用TAR文件和URL路径

ADD  ..

   举例:
    ADD
    指令类似于COPY指令,ADD支持使用TAR文件和URL路径
    ADD  .. 
    
    1、拷贝单个文件
    ADD ./a.txt DIR/b
    
    2、使用通配符拷贝多个文件
    #拷贝当前目录下的bin文件夹的所有sh文件到/usr/bin目录下
    ADD ./bin/*.sh /usr/bin/
    
    #拷贝当前目录下的bin文件夹的所有带后缀的文件到/usr/bin目录下
    ADD ./bin/*.* /usr/bin/
    
    #拷贝当前目录下的bin文件夹的所有不带后缀的文件到/usr/bin目录下
    ADD ./bin/* /usr/bin/
    
    #拷贝当前目录下的bin文件夹的所有文件到/usr/bin目录下(/usr/bin目录原有的文件会保留)
    ADD ./bin/ /usr/bin/
    
    3、拷贝文件夹
    ADD ./config /usr/bin/config


5.设置工作目录 一旦设定,下面使用就可以

WORKDIR

6.挂在卷目录设置

VOLUME 宿主机路径 容器路径

7、 EXPOSE
    用于为容器打开指定要监听的端口以实现与外部通信
    EXPOSE [/ ] [[/ ]
    用于指定传输层协议,可为tcp或udp二者之一,默认为TCP协议
    例如:EXPOSE 11211/udp 11211/tcp
 

8.用于为镜像定义所需的环境变量

ENV key value 或者 ENV key1=value1 key2=value2

此处一旦设置就可以 使用${key} 来使用

 

9.RUN 

用于指定docker build过程中运行的程序,其可以是任何命令 RUN 或 RUN ["", "", ""]

10.CMD

    类似于RUN指令,CMD指令也可用于运行任何命令或应用程序 RUN指令运行于映像文件构建过程中,而CMD指令运行于基于Dockerfile构建出的新映像文件启动一个容器时
    CMD指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过,
    CMD指定的命令其可以被docker run的命令行选项所覆盖

    Dockerfile中可以存在多个CMD指令,但仅最后一个会生效
    
    CMD  
    或
    CMD ["","",""] 
    或
    CMD ["",""]
    
    前两种语法格式的意义同RUN
    第三种则用于为ENTRYPOINT指令提供默认参数
    json数组中,要使用双引号,单引号会出错
 

 11、ENTRYPOINT
    类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序
    与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,
    这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序
    不过,docker run命令的 --entrypoint选项的参数可覆盖ENTRYPOINT指令指定的程序
    
    ENTRYPOINT
    或
    ENTRYPOINT ["", "", ""]
    
    docker run命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用
    Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效

 以上命令具体参考https://blog.csdn.net/qq_30263071/article/details/126623006

3.docker-compose作用

进行容器编排作用:比如一个容器依赖于另一个容器,就需要docker-compose来编排

3.1 下载 安装

3.1.1 下载

下载1后上传linux

迅雷下载路径https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64

linux直接下载到

# 这里下载到了/usr/local/bin
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#赋权成可执行文件

chmod +x /usr/local/bin/docker-compose
 

3.1.2 安装

上传到linux下 /usr/local/bin下面 并重命名为docker-compose

[root@localhost bin]# ll
total 25904
-rwxrwxrwx. 1 root root 26525696 Jul 20 03:27 docker-compose
[root@localhost bin]# pwd
/usr/local/bin

3.1.3 安装测试

 [root@localhost bin]# docker-compose version
Docker Compose version v2.5.0
[root@localhost bin]# 

 3.1.4 简单demo

#创建文件夹

mkdir -p  /home/dockercompose

#创建配置文件

cd /home/dockercompose

vi docker-compose.yml

将以下内容进行粘贴

#docker-compose 的版本
version: "2.5.0"
#服务
services:
  #服务名称
  tomcat01:
   container_name: tomcat01 #自定义容器名称 不建议自己定义 因为名称具有唯一性
   #使用镜像
   image: tomcat:8.0
   ports:
    - 8081:8080
  #服务名称
  tomcat02:
   #使用镜像
   image: tomcat:8.0
   ports:
    - 8082:8080

  #服务名称
  redis01:
   #使用镜像
   image: redis:5.0.12
   ports:
    - 6379:6379

  #服务名称
  mysql01:
   #使用镜像
   image: mysql:5.6
   ports:
    - 3306:3306
  #给当前启动环境配置环境  相当于docker run -e 中的-e
   environment:
    - "MYSQL_ROOT_PASSWORD=123456"
   #相当于docker run -v中的-v 数据卷 宿主机路径必须存在
   volumes:
    #绝对路径方式
    #- /home/volumes/mysql/mysqldata1:/var/lib/mysql
    #别名方式
    - mysqlData:/var/lib/mysql

volumes:
 mysqlData:  #声明volumes的别名 如果不声明,就不能用别名方式

 启动

在docker-compose.yml所在的路径下面启动 

#前台启动

docker-compose up

#或者后台启动

docker-compose up -d

#停止docker-compose

docker-compose down #此种停止docker-compose可以删除容器 但是容器卷没有被删除

浏览器访问 http://ip:8081

你可能感兴趣的:(linux,运维,服务器)