Docker每日一阅(6):Docker 练习:Dockerfile环境变量,打包镜像

Docker每日一阅(6):Docker 练习:Dockerfile环境变量,打包镜像



0 回顾

  • 查看运行容器的日志(docker container logs [container id]
  • 关闭正在运行的容器(docker container stop [container id]
  • 创建镜像(docker container commit [container id]/docker image build ...
  • 查看镜像的详细信息(docker image inspect [image id]
  • 对docker image run相关,包括
    • docker container run --name [container_name] [docker_image]
    • docker container run -d [docker_image]
    • docker container run -it [docker_image]
    • docker container run -p [host_ip]:[host_port]:[container_port] [docker_image]
    • docker container run -v [/host/volume/location]:[/container/storage] [docker_image]
    • docker container run --mount type=bind,source=[/host/volume/location],destination=[/container/storage] [docker_image]
    • docker container run --rm [docker_image]

0 任务描述

  • 练习1:Dockerfile的环境变量
  • 练习2:查错
  • 练习3:打包镜像
  • 练习4:容器命名
  • 练习5:文件传输

1 练习:Dockerfile的环境变量

1.1 问题

如下为一个Dockerfile里的内容:

FROM busybox

CMD echo $myhost

我们需要自己新建一个Dockerfile,然后build这个镜像:

docker build -t testimage .

新建一个容器,并且设置一个环境变量myhost

docker run --rm -e myhost=host1 testimage

当你修改Dockerfile后,你的道德输出应该是:host1

如果你没有设置此环境变量,运行docker run --rm testimage,你所得到的输出是:testhost。(注意,修改完dockerfile之后,需要重新新建镜像和运行容器)

1.2 答案

修改Dockerfile为:

FROM busybox

ENV myhost=testhost

CMD echo $myhost

2 练习:查错

2.1 问题

现在,让我们将Dockerfile修改为:

FROM alpine

ENV ITEM value

ENTRYPOINT  echo ${ITEM;}

让我们来新建镜像:docker build -t testenv1 .,并且运行容器:docker run --rm -e ITEM=5 testenv1。我们会发现出错了。找到错误的根源并修改。

2.2 答案

Dockerfile可以修改为:

FROM alpine

ENV ITEM value

ENTRYPOINT  echo ${ITEM}

ITEM后面有一个;需要删除。

3 练习:打包镜像

3.1 问题

现在,让我们把Dockerfile修改为

FROM scratch

COPY a.txt /

并且,在此当前目录下新添加一个a.txt文件,里面随便写点什么,比如我写了个“1”。

问题:

  • 如果查看我们新建的镜像大小?
  • 如何打包这个镜像到tar文件?
  • 如何查看这个镜像里有什么?

3.2 答案

让我们先新建一个镜像:

docker build -t imageex3 .

我们可以通过inspect命令来查看镜像的详细信息:

docker image inspect -f '{{ .Size }}' imageex3

terminal中返回:1239748

我们可以通过docker image save来保存镜像到tar文件:

docker save -o imageex3.tar imageex3

在terminal当前路径下,我们就能看到一个imageex3.tar压缩包。

我们可以解压,然后看看里面有什么:

mkdir tmp
cd tmp
tar xvf ../imageex3.tar

4 练习:容器命名

4.1 问题

如果我们运行如下指令:

docker run -it --name=test1 alpine:latest date
docker run -it --name=test1 alpine:latest date

我们会发现,运行第二段的时候会报错。那么为什么不成功呢?

4.2 答案

问题在于,我们不能给两个容器同一名称。我们可以做出如下修改

docker run -it --rm --name=test1 alpine:latest date
docker run -it --name=test1 alpine:latest date

即,当我们运行完第一个容器后,就把它删除,然后再运行第二个容器。或者

docker run -it --name=test1 alpine:latest date
docker run -it --name=test2 alpine:latest date

给不同的容器不同的命名。

5 练习:文件传输

5.1 问题

如果一个容器已经开始运行,那么我们如何将主机的某个文件传到这个容器的某个路径下?

5.2 答案

一种解决方式是使用docker cp将文件复制到容器中。

首先,我们在一个terminal中运行一个容器

docker run -it --rm --name=dockerex5  alpine:latest sh

然后,在另外一个terminal中,

docker container cp $pwd/a.txt dockerex5:/tmp
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于您的问题,这里提供一个基于openEuler:20.03的docker镜像封装mysql5:7的dockerfile案例,具体操作步骤如下: 1. 首先,您需要在本地安装docker。 2. 创建一个新的工作文件夹,并在其中创建一个名为dockerfile的文件。 3. 在dockerfile文件中编写以下代码来定义基本镜像,以及安装mysql5:7所需的依赖库和软件包: ``` FROM openEuler:20.03 RUN yum install -y wget \ && yum install -y libaio numactl \ && wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz \ && tar -zxvf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz \ && mv mysql-5.7.29-linux-glibc2.12-x86_64 /usr/local/mysql \ && rm -rf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz \ && echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile \ && source /etc/profile ``` 4. 在dockerfile文件所在的工作文件夹中运行以下命令,来构建mysql5:7的docker镜像: ``` docker build -t mysql5:7 . ``` 5. 利用以下命令来运行mysql5:7 docker镜像,并启动mysql服务: ``` docker run -itd --name mysql5 -p 3306:3306 mysql5:7 \ /usr/local/mysql/bin/mysqld_safe --user=mysql --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid --log-error=/var/log/mysql/error.log \ --socket=/var/lib/mysql/mysql.sock ``` 6. 启动mysql5:7 docker镜像后,您可以通过您的MySQL客户端来连接到MySQL服务器,以开始进行数据管理和查询等操作。 希望以上内容能够对您有所帮助。如果您有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

破浪会有时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值