Dockerfile使用记录

docker 使用默认的Dockerfile来构建镜像命令(注意后面有一个”.”)

docker build –t images_name .

docker 使用指定的Dockerfile来构建镜像命令(注意后面有一个”.”)

docker build -f demofile –t images_name .

 

上面说了使用dockerfile构建镜像的命令,下面我们来说一下dockerfile里面的命令

各命令详解

FROM

指定哪种镜像作为新镜像的基础镜像,如:

FROM ubuntu:14.04

MAINTAINER

指明该镜像的作者和其电子邮件,如:

MAINTAINER LSC "xxxxxxx@qq.com"

RUN

在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境,可使用\来换行,如:

RUN echo 'hello docker!' \

    > /usr/local/file.txt

也可以使用exec格式RUN ["executable", "param1", "param2"]的命令,如:

RUN ["apt-get","install","-y","nginx"]

要注意的是,executable是命令,后面的param是参数

COPY

将主机的文件复制到镜像内,如果目的位置不存在,Docker会自动创建所有需要的目录结构,但是它只是单纯的复制,并不会去做文件提取和解压工作。如:

COPY application.yml /etc/springboot/hello-service/src/resources

注意:需要复制的目录一定要放在Dockerfile文件的同级目录下
原因:

因为构建环境将会上传到Docker守护进程,而复制是在Docker守护进程中进行的。任何位于构建环境之外的东西都是不可用的。COPY指令的目的的位置则必须是容器内部的一个绝对路径。
---THE DOCKER BOOK

ADD

将主机的文件复制到镜像中,跟COPY一样,限制条件和使用方式都一样,如:

ADD application.yml /etc/springboot/hello-service/src/resources

但是ADD会对压缩文件(tar, gzip, bzip2, etc)做提取和解压操作。

EXPOSE

暴露镜像的端口供主机做映射,启动镜像时,使用-P参数来讲镜像端口与宿主机的随机端口做映射。使用方式(可指定多个):

EXPOSE 8080

EXPOSE 8081

...

WORKDIR

在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录。如

WORKDIR /usr/local

WORKDIR webservice

RUN echo 'hello docker' > text.txt

...

最终会在/usr/local/webservice/目录下生成text.txt文件

ONBUILD

当一个包含ONBUILD命令的镜像被用作其他镜像的基础镜像时(比如用户的镜像需要从某为准备好的位置添加源代码,或者用户需要执行特定于构建镜像的环境的构建脚本),该命令就会执行。
如创建镜像image-A

FROM ubuntu

...

ONBUILD ADD . /var/www

...

然后创建镜像image-B,指定image-A为基础镜像,如

FROM image-A

...

然后在构建image-B的时候,日志上显示如下:

Step 0 : FROM image-A

# Execting 1 build triggers

Step onbuild-0 : ADD . /var/www

...

USER

指定该镜像以什么样的用户去执行,如:

USER mongo

VOLUME

用来向基于镜像创建的容器添加卷。比如你可以将mongodb镜像中存储数据的data文件指定为主机的某个文件。(容器内部建议不要存储任何数据)
如:

VOLUME /data/db /data/configdb

注意:VOLUME 主机目录 容器目录

CMD

容器启动时需要执行的命令,如:

CMD /bin/bash

同样可以使用exec语法,如

CMD ["/bin/bash"]

当有多个CMD的时候,只有最后一个生效。

ENTRYPOINT

作用和用法和CMD一模一样

CMDENTRYPOINT的区别

敲黑板!!!非常重要
一定要注意!

一定要注意!

一定要注意!
CMDENTRYPOINT同样作为容器启动时执行的命令,区别有以下几点:

CMD的命令会被 docker run 的命令覆盖而ENTRYPOINT不会

如使用CMD ["/bin/bash"]ENTRYPOINT ["/bin/bash"]后,再使用docker run -ti image启动容器,它会自动进入容器内部的交互终端,如同使用
docker run -ti image /bin/bash

但是如果启动镜像的命令为docker run -ti image /bin/ps,使用CMD后面的命令就会被覆盖转而执行bin/ps命令,而ENTRYPOINT的则不会,而是会把docker run 后面的命令当做ENTRYPOINT执行命令的参数
以下例子比较容易理解
Dockerfile中为

ENTRYPOINT ["/user/sbin/nginx"]

然后通过启动build之后的容器

docker run -ti image -g "daemon off"

此时-g "daemon off"会被当成参数传递给ENTRYPOINT,最终的命令变成了

/user/sbin/nginx -g "daemon off"

CMDENTRYPOINT都存在时

CMDENTRYPOINT都存在时,CMD的指令变成了ENTRYPOINT的参数,并且此CMD提供的参数会被 docker run 后面的命令覆盖,如:

...

ENTRYPOINT ["echo","hello","i am"]

CMD ["docker"]

之后启动构建之后的容器

  • 使用docker run -ti image

输出“hello i am docker”

  • 使用docker run -ti image world

输出“hello i am world”

指令比较多,可以通过分类(如开头的表格)的办法去记忆

示例

自己写了个简单的示例,非常简单

FROM ubuntu
MAINTAINER vector4wang xxxx@qq.com
 
WORKDIR /usr/local/docker
ADD temp.zip ./add/
COPY temp.zip ./copy/
EXPOSE 22
RUN groupadd -r vector4wang && useradd -r -g vector4wang vector4wang
USER vector4wang
 
ENTRYPOINT ["/bin/bash"]

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置一个Dockerfile以运行MySQL容器,可以按照以下步骤进行操作: 1. 在你的项目目录中创建一个名为Dockerfile的文件。 2. 在Dockerfile中,使用FROM指令指定基础镜像,例如使用官方的MySQL镜像:FROM mysql:latest。 3. 使用ENV指令设置MySQL的环境变量,比如设置ROOT_PASSWORD来指定MySQL的root密码。 4. 如果需要,可以使用ADD或COPY指令将你的自定义配置文件复制到容器中,例如将my.cnf文件复制到/etc/mysql/my.cnf中。 5. 使用EXPOSE指令指定容器将要监听的端口,比如EXPOSE 3306来监听MySQL的默认端口。 6. 最后,使用CMD指令指定容器启动时运行的命令,例如CMD ["mysqld"]来启动MySQL服务。 为了进行构建和运行,可以按照以下步骤执行命令: 1. 在命令行中进入Dockerfile所在目录。 2. 执行命令docker build -t my-mysql .来构建名为my-mysql的Docker镜像。 3. 执行命令docker run -d -p 3306:3306 --name my-mysql -v /path/to/data:/var/lib/mysql my-mysql来运行名为my-mysql的Docker容器。 通过以上步骤,你将成功配置了一个Dockerfile来运行MySQL容器,并且可以通过3306端口连接到MySQL数据库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [dockerfile使用记录:在生产中使用dockerfile构建mysql详细教学加案例](https://blog.csdn.net/Liu__sir__/article/details/130643737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值