第五周

第五周
1、安装docker并配置镜像加速。
2、dockerfile常用指令总结。
3、基于alpine制作tomcat镜像
4、利用桥接实现不同宿主机间容器互联。

1、docker 安装并配置镜像加速

安装:

阿里云

docker 官方

docker-compose 安装

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start

# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
#   将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
#   Loading mirror speeds from cached hostfile
#   Loaded plugins: branch, fastestmirror, langpacks
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable
#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
#   Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

国内镜像加速:

mkdir -p /etc/docker
touch /etc/docker/daemon.json
cat >>/etc/docker/daemon.json<<EOF
{
    "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"],
    "log-driver": "json-file",
    "log-opts": {"max-size":"500m","max-file":"3"},
    "data-root": "/data/docker"
}

EOF

2、dockerfile常用指令

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

Dockerfile 有以下指令选项:

指令 用法 功能 说明 备注
FROM FROM 指定构建镜像的基础源镜像 FROM必须是 Dockerfile 中非注释行的第一个指令,即一个 Dockerfile 从FROM语句开始。
FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像。
如果FROM语句没有指定镜像标签,则默认使用latest标签。
MAINTAINER MAINTAINER 指定创建镜像的用户
RUN RUN shell 模式
RUN ["executable", "param1", "param2"] exec 模式
在当前镜像基础上执行指定命令 这种方式会被解析为一个 JSON 数组,所以必须使用双引号而不是单引号。exec 方式不会调用一个命令 shell,所以也就不会继承相应的变量 Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
CMD CMD ["executable","param1","param2"]exec模式 【推荐】
CMD command param1 param2 (shell form)
CMD ["param1","param2"]
CMD的目的是为了在启动容器时提供一个默认的命令执行选项。 CMD指定在 Dockerfile 中只能使用一次,如果有多个,则只有最后一个会生效。
CMD的目的是为了在启动容器时提供一个默认的命令执行选项。如果用户启动容器时指定了运行的命令,则会覆盖掉CMD指定的命令。
CMD会在启动容器的时候执行,build 时不执行,而RUN只是在构建镜像的时候执行,后续镜像构建完成之后,启动容器就与RUN无关了
EXPOSE EXPOSE [...] 服务端容器对外映射的本地端口 需要在 docker run 的时候使用-p或者-P选项生效
ENV ENV
ENV =
指定一个环节变量,会被后续RUN指令使用,并在容器运行时保留。 只能设置一个变量
允许一次设置多个变量
ADD ADD ... 将文件从路径 复制添加到容器内部路径 必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url。 是目标容器中的绝对路径。 如果src是一个目录,只会复制目录下的内容,而目录本身则不会被复制
COPY COPY ... COPY 指令和ADD 指令功能和使用方式类似。只是COPY 指令不会做自动解压工作
ENTRYPOINT ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2 (shell form)
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖,而CMD是可以被覆盖的。如果需要覆盖,则可以使用docker run --entrypoint选项。 每个 Dockerfile 中只能有一个ENTRYPOINT,当指定多个时,只有最后一个生效。
VOLUME VOLUME ["/data"] 创建一个可以从本地主机或其他容器挂载的挂载点 一般用来存放数据库和需要保持的数据等。
USER USER daemon 指定运行容器时的用户名或 UID 用来切换运行属主身份的。Docker 默认是使用 root,后续的RUN、CMD、ENTRYPOINT也会使用指定用户。
WORKDIR WORKDIR /path/to/workdir 后续的RUN、CMD、ENTRYPOINT指令配置工作目录。 可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。
ONBUILD ONBUILD [INSTRUCTION] ONBUILD 的作用就是让指令延迟執行,延迟到下一个使用 FROM 的 Dockerfile 在建立 image 时执行,只限延迟一次。

3、基于alpine制作tomcat镜像

3.1 下载alpine 镜像

docker pull alpine:latest

3.2、编写安装JDK的Dockerfile文件

#1.指定基础镜像,并且必须是第一条指令
FROM alpine:latest

#2.指明该镜像的作者和其电子邮件
MAINTAINER xiangzi "xxxxx@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /apps/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>
## ADD与COPY的区别:ADD复制并解压,COPY仅复制
ADD jdk-8u221-linux-x64.tar.gz /apps/jdk/
## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中
COPY glibc-2.29-r0.apk /apps/jdk/
COPY glibc-bin-2.29-r0.apk /apps/jdk/
COPY glibc-i18n-2.29-r0.apk /apps/jdk/

#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade

#6.运行指定的命令
## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
## ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add ca-certificates wget \
    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
    && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \
    && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk

#7.配置环境变量
ENV JAVA_HOME=/apps/jdk/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH

#容器启动时需要执行的命令
#CMD ["java","-version"]

3.3.执行dockerfile创建镜像

docker build -t jdk8:v1.8u221 .

3.4.启动并进入容器

docker run -it --name myjdk jdk8:v1.8u221

3.5.测试jdk

java -version

3.6 编写安装tomcat的Docker文件

FROM alpine-jdk:v1.8u221
MAINTAINER xiangzi "xxxxx@qq.com"
ENV VERSION=8.5.70
ENV TZ "Asia/Shanghai"
ENV LANG en_US.UTF-8
ENV TERM xterm
ENV TOMCAT_MAJOR_VERSION 8
ENV TOMCAT_MINOR_VERSION ${VERSION}
ENV CATALINA_HOME /apps/tomcat
ENV APP_DIR ${CATALINA_HOME}/webapps
WORKDIR /apps
RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz \
&& tar zxf apache-tomcat-${VERSION}.tar.gz \
&& mv apache-tomcat-${VERSION} $CATALINA_HOME \
&& rm -rf apache-tomcat-${VERSION}.tar.gz $CATALINA_HOME/webapps/* $CATALINA_HOME/bin/*.bat 
EXPOSE 8080
ENTRYPOINT ["/apps/tomcat/bin/catalina.sh","run"]

3.7 构建基于alpine-JDK的tomcat镜像

 docker build -t tomcat-base:v8.5.70
posted @ 2021-10-10 21:42  *(祥子)*  阅读(79)  评论(0)    收藏  举报