3、Docker核心必备之自定义镜像实战

2021-07-25  本文已影响0人  日落_3d9f

3.1 构建自定义镜像的意义与应用场景

简介:介绍自定义镜像的重要性

3.2 Commit构建自定义镜像

简介:对容器的修改以及保存

3.3 核心必备知识之Dockerfile构建镜像实战

简介:Dockerfile构建镜像实战

# this is a dockerfile
FROM centos:7
MAINTAINER XD 123456@qq.com
RUN echo "正在构建镜像!!!"
WORKDIR /home/xdclass
COPY 123.txt /home/xdclass
RUN yum install -y net-tools

3.4 Docker核心知识之镜像分层结构剖析

简介:介绍镜像的分层结构

使用dockerfile构建镜像

使用dockerfile构建镜像的时候,每一个步骤都会生成一个镜像ID。

使用docker history命令可以查看docker构建镜像的过程。

查看历史 docker分层结构

3.5 不得不掌握的Dockerfile基础指令

简介:介绍一些常用的Dockerfile指令

#第一个
FROM centos:7
RUN echo "images building!"
CMD ["echo","container","starting..."]
ENTRYPOINT ["echo","container","starting !!!"]
#第二个
FROM centos:7
RUN echo "images building!"
CMD ["echo","containe1r","starting..."]
CMD ["echo","container2","starting..."]
ENTRYPOINT ["echo","container2","starting !!!"]
ENTRYPOINT ["echo","container2","starting !!!"]
#第三个
FROM centos:7
CMD ["-ef"]
ENTRYPOINT ["ps"]
构建镜像

执行第一个dockerfile,我们会发现仅执行run的时候出现images building提示,在CMD、ENTRYPOINT 命令时候没有提示。这是因为run命令作用于镜像层面,CMD、ENTRYPOINT命令作用于容器层。另外容器启动的时候,我们看到了CMD、ENTRYPOINT命令的执行。

docker提示

执行第二个dockerfile,如下:


执行第二个dockerfile

跟执行第一个dockerfile类似,启动构建的容器:

image.png

我们发现ENTRYPOINT、CMD dockerfile里有多条时只允许执行最后一条。

执行第三个dockerfile,过程如下图所示:


docker构建过程

执行镜像:


执行镜像 自己添加命令可以覆盖CMD命令

3.6 实战系列之Dockerfile构建JAVA网站镜像

简介:Dockerfile构建java环境

本地宿主机配置jdk

vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
FROM centos:7
ADD jdk-8u211-linux-x64.tar.gz /usr/local
RUN mv /usr/local/jdk1.8.0_211 /usr/local/jdk
ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
ADD apache-tomcat-8.5.35.tar.gz /usr/local
RUN mv /usr/local/apache-tomcat-8.5.35 /usr/local/tomcat
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
docker run -itd -p 80:8080 -v /root/test/ROOT:/usr/local/tomcat/webapps/ROOT
mycentos:jdk /bin/bash

3.7 实战系列之Dockerfile构建nginx镜像

简介:Dockerfile构建nginx

FROM centos:7
ADD nginx-1.16.0.tar.gz /usr/local
COPY nginx_install.sh /usr/local
RUN sh /usr/local/nginx_install.sh
EXPOSE 80

安装nginx的shell脚本

#!/bin/bash
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel
cd /usr/local/nginx-1.16.0
./configure --prefix=/usr/local/nginx && make && make install

3.8 实战系列之Dockerfile构建redis镜像

简介:Dockerfile构建redis

#!/bin/bash
yum install -y gcc gcc-c++ make openssl openssl-devel
cd /home/redis-4.0.9
make && make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf/
cp /home/redis-4.0.9/redis.conf /usr/local/redis/conf/
sed -i '69s/127.0.0.1/0.0.0.0/' /usr/local/redis/conf/redis.conf
sed -i '88s/protected-mode yes/protected-mode no/' /usr/local/redis/conf/redis.conf
FROM centos:7
ADD redis-4.0.9.tar.gz /home
COPY redis_install.sh /home
RUN sh /home/redis_install.sh
ENTRYPOINT /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
[root@localhost home]# /usr/local/redis/bin/redis-cli -p 6380
127.0.0.1:6380> set name xdclass
OK
127.0.0.1:6380> get name
"xdclass"
127.0.0.1:6380>

3.9 实战系列之docker快速部署mysql数据库并初始化

简介:Dockerfile快速部署mysql数据库并初始化

FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ENV LANG=C.UTF-8
ADD init.sql .
-- 建库
create database `db_student`;
SET character_set_client = utf8;
use db_student;
-- 建表
drop table if exists `user`;
CREATE TABLE user (
id tinyint(5) zerofill auto_increment not null comment '学生学号',
name varchar(20) default null comment '学生姓名',
age tinyint default null comment '学生年龄',
class varchar(20) default null comment '学生班级',
sex char(5) not null comment '学生性别',
unique key (id)
)engine=innodb charset=utf8;
-- 插入数据
insert into user values('1','小明','15','初三','男');
insert into user values('2','小红','13','初二','女');
insert into user values('3','小东','14','初一','男');
insert into user values('4','小西','12','初二','男');
上一篇 下一篇

猜你喜欢

热点阅读