Docker构建自定义的镜像

背景:官方镜像使用的都是默认配置,比如mysql容器使用的官网的mysql,需要自己修改mysql的配置文件、设置用户名和密码

·部署服务,比如在tomcat容器中部署用户服务,把部署好的tomcat容器打包为一个镜像,部署用户服务集群时,直接拉取这个镜像即可,不需要一个一个部署用户服务

方式:docker制作镜像的2种方式

1.Docker Commit

2.dockerfile   主流方式

应用场景:

  • 构建自定义镜像的意义

docker目前镜像的制作有俩种方法:

    基于Docker Commit制作镜像

    基于dockerfifile制作镜像,dockerfifile方式为主流的制作镜像方式

docker自己制作镜像:

pull一个centos系统:

[root@docker01 ~]# docker pull centos

把centos用docker运行起来:

[root@docker01 ~]# docker run --name nginx-eman -it centos

安装nginx需要的依赖环境:

[root@534aac011ad8 /]# yum install -y wget gcc gcc-c++ make openssl-devel

下载nginx安装包:

[root@534aac011ad8 /]# wget http://nginx.org/download/nginx-1.9.3.tar.gz

安装nginx:

1、安装Nginx

mkdir /application/oldboy/tools -p

cd /application/oldboy/tools

wget http://nginx.org/download/nginx-1.6.2.tar.gz

yum install pcre pcre-devel -y

yum install openssl openssl-devel -y

tar zxvf nginx-1.6.2.tar.gz     

cd nginx-1.6.2

useradd nginx -s /sbin/nologin -M

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx1.6.2 --with-http_stub_status_module --with-http_ssl_module

echo $?

make && make install

ln -s /usr/local/nginx1.6.2/ /usr/local/nginx

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx

netstat -lntup |grep nginx

把nginx放到开机自启动下:

注意:这里需要先把nginx放到后台运行去掉:

vim /usr/local/nginx/conf/nginx.conf

-----------------------------------------------------

在第1行添加如下内容:

daemon off;

vim /etc/rc.local

--------------------------------------------

在结尾添加如下2行:

#nginx start

/usr/local/nginx/sbin/nginx

[root@534aac011ad8 ~]# exit

exit

[root@docker01 ~]# docker ps -l

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES

534aac011ad8        centos              "/bin/bash"         15 hours ago        Exited (0) 6 seconds ago                       nginx-man           

把docker带有nginx的容器做成镜像:

[root@docker01 ~]# docker commit -m "my nginx" 534aac011ad8 huwei/my-nginx:v1

6643f138432d319bd14dea9efecbaa0ad987e1ee2b0418641edb21300e8c4d36

[root@docker01 ~]#

[root@docker01 ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

huwei/my-nginx      v1                  6643f138432d        36 seconds ago      403.3 MB

nginx               latest              5c82215b03d1        8 days ago          132.8 MB

centos              latest              ce20c473cd8a        8 days ago          172.3 MB

dockers commit制作镜像思路

通过docker commit制作镜像,运行一个基础镜像,然后在基础镜像上进行软件的安装和配置文件的修改。然后提交变动到新的镜像。

1、docker run

1)docker images 先查看有本地已有的镜像,选择需要的基础镜像,如果没有需要的,就用docker pull拉取需要的镜像

2)然后用docker run 将镜像跑为容器

2、docker commit  -a 作者信息 -m 说明信息 容器名称  镜像的名字(自己取一个)

-a 指定作者信息  -m 提交的说明信息  -p在commit时默认暂停容器

3、docker diff 查看镜像存储层变化

4、docker history  -q 只显示镜像ID

二、Dockerfile是一个文本文档,可以通过docker build 命令构建成一个镜像。我们可以在Dockerfile中定义一系列的命令,构建出我们想要的镜像。

Dockerfile方式构建镜像时,需要定义一个Dockerfile的文本文件。

Dockerfile的包含信息

1.需要指定基础镜像的信息

2.MAINTAINER 指定维护者信息

3.RUN 执行命令

Shell)模式

RUN <command> 默认使用`/bin/sh -c `执行命令

例:RUN  yum install -y httpd

例:RUN  echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

2)exec模式

RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式

说明:RUN命令是用来执行命令行,注意每用一个RUN(dockerfile指令)就是镜像添加多一层(最大限制127层)。

4.COPY 复制文件

# 拷贝文件或目录到镜像(不能自动解压缩)

5.ADD 高级复制

# 拷贝文件或目录到镜像(可以自动解压缩或者下载)

6、CMD 容器启动命令

7、ENTRYPOINT 入口点

8、ENV 用设置环境变量

9、ARG 构建参数

10、VOLUMN 定义匿名卷

11、EXPOSE 暴露端口

12、WORKDIR  指定工作目录

13、USER 指定当前用户

14、HEALTHCHECK 健康检查
15、ONBUILD 镜像触发器

16、docker build

通过docker build命令来创建镜像,该命令首先会上传Dockerfile文件给Docker服务器端,服务器端将逐行执行Dockerfile中定义的指令。

文献:

可以通过查看docker官网的Dockerfile的文本文件

https://github.com/nginxinc/docker-nginx/blob/d039609e3a537df4e15a454fdb5a004d519e9a11/mainline/debian/Dockerfile

如何制作镜像制作

编辑DockerFile文件

cat  DockerFile

FROM redis:latest

ENV VER 3.0.0

ENV TARBALL http://download.redis.io/releases/redis-$VER.tar.gz

RUN mkdir /apps/app

RUN dd if=/dev/zero of=/tmp/apps/app bs=1048576 count=100

RUN rm /tmp/apps/app

RUN yum -y update

RUN yum -y install redis

ADD entrypoint.sh /

ENTRYPOINT [ "/bin/sh","/entrypoint.sh" ]

docker build -t redis:latest

docker run -itd -e PASSWORD=123 -e PORT=7000 -e MAXMEMORY=5gb -e PROMTECTEDMODE=yes -e DATADIR=/data/redis redis:latest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值