docker使用教程[三]Dockfile小试牛刀

279 阅读3分钟

本来计划着今天要讲关于docker数据卷部分的知识和配置操作相关的,但是今天复习docker知识的时候恰好看到了Dockfile的知识,所以今天帮大家了解一下关于如何私人定制自己的docker镜像。

比如我们前面的文章讲到了我们需要关于oracle的镜像,但是假如我们需要的ubuntu+mysql的镜像呢?而且万能的阿里爸爸又没有相关的免费镜像提供(这个大家无需担心,只是为了讲解需要而已)

所以今天要引入一下关于Dockfile的知识,我将会在这篇文章中带大家定制一个关于Go开发环境的镜像,借此帮大家了解Dockfile的编写。

第一步,先帮大家解析一下如何打造一个docker的go开发环境

步骤①:安装一个操作系统,这里我们选择直接pull一个ubuntu的镜像

创建容器:(这里由于演示仓促没有添加--name选项,大家一定要加)

#基于镜像ubuntu创建golang容器
docker run -it ubuntu --name goland bash

步骤②:升级更新系统

#使用命令升级系统 
apt-get update

步骤③:安装golang

#使用命令安装golang
apt-get -y install golang 

步骤④:设置环境变量

vim ~/.bashrc
在末尾加入
export GOPATH=/opt/go
export GOROOT=/usr/local/go
export GOARCH=386
export GOOS=linux
export GOBIN=$GOROOT/bin/
export GOTOOLS=$GOROOT/pkg/tool/
export PATH=$PATH:$GOBIN:$GOTOOLS

步骤⑤:验证是否正确安装

#打开终端执行
go env

至此我们的go开发环境已经构建成功了,当然我们通过docker commit以当前的容器为基准创建一个新的镜像

#通过容器id创建镜像
docker commit <container_id> <image_name>

commit成功后

查看本机镜像

至此,我们的go环境镜像test就已经建立了。当然大家可以通过这种办法为自己定制镜像,这里只着重讲述dockerfile,大家可以根据需求自行选择。

第二步,解析如何去写Dockfile

Dockfile是由一行行命令语句组成,并且迟滞以#开头的注释行;一般而言,Dockerfiel分为四部分:

1.基础镜像信息 ;2.维护者信息;3.镜像操作指令;4.容器启动时指令,如下为一个标准的dockfile镜像模板:

# This dockerfile uses the ubutu image
# VERSION 2 - EDITON 1
# Author docker_user
# Command format: Instruction [arguments / command ] ..

# (第一部分) 基础镜像信息 
FROM ubuntu

# (第二部分) 维护者信息
MAINTAINER docker_user docker_user@email.com

#(第三部分)镜像操作指令 
RUN yum install apr-devel -y

    #(第四部分) 容器启动时指令
CMD /usr/sbin/echo

通过上面搭建go环境的分析,不难发现,搭建整个环境只需要这五步:

选择系统,升级系统,安装golang,加载环境变量,验证是否成功安装

所以我们可以这样根据Dockerfile模板编写我们的Dockerfile

#基础镜像
FROM ubuntu

#维护者信息
MAINTAINER shedray1348296317 @qq.com 

#增加环境变量
ENV GOPATH /opt/go
ENV GOROOT /usr/local/go
ENV  GOARCH 386
ENV GOOS linux
ENV  GOBIN $GOROOT/bin/
ENV GOTOOLS $GOROOT/pkg/tool/
#执行命令
RUN apt-get update
&&apt-get -y install golang
#运行以下命令
CMD ['go env']

建立一个dockerfile的文件夹

然后将我们的dockerfile保存到这个文件夹里并命名为Dockerfile

打开终端,切到该目录执行

#通过dockerfile构建镜像
#-t :tag 指我们的镜像名称 
#. :指当前目录
docker build -t test:v1 .

执行后

可以发现正在按写的dockerfile一步一步的构建镜像

当然这个时间是非常长的,基于我这边的网速问题,这里就不贴出执行结果了。

这里就跟大家解释一下我们所用到的几个Dockerfile关键字

FROM 指定基础镜像,我们这里采用的是ubuntu

MAINTAINER 添加维护者信息,就是镜像作者名字

ENV 环境变量,这里添加了关于go的变量

RUN 要执行的命令,我们这里进行了系统更新和golang的安装

CMD 可以理解为开机启动项,创建容器后执行

更多有关dockerfile关键字的内容大家可以移步

Dockerfile关键字​
blog.csdn.net

剩下的关键字等我们用到的时候在跟大家详细解析,今天的有关内容到这里

明天我会跟大家写一篇关于如何通过Dockerfile搭建httpd服务的文章,使大家对Dockerfile有进一步的认识,大家有什么问题可以在评论区进行讨论,或者说文章有何不足也欢迎大家指出!!!