Dockerfile:使用dockerfile创建一个属于自己的镜像
docker-compose:对多个容器进行编排
使用一定的语法
docker build -t aa:1.0 .(.指定dockerfile所在位置,.代表目前所在位置)
在构建镜像时候 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
进行容器编排作用:比如一个容器依赖于另一个容器,就需要docker-compose来编排
下载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
上传到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
[root@localhost bin]# docker-compose version
Docker Compose version v2.5.0
[root@localhost bin]#
#创建文件夹
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/mysqlvolumes:
mysqlData: #声明volumes的别名 如果不声明,就不能用别名方式
启动
在docker-compose.yml所在的路径下面启动
#前台启动
docker-compose up
#或者后台启动
docker-compose up -d
#停止docker-compose
docker-compose down #此种停止docker-compose可以删除容器 但是容器卷没有被删除
浏览器访问 http://ip:8081