第五周
第五周
1、安装docker并配置镜像加速。
2、dockerfile常用指令总结。
3、基于alpine制作tomcat镜像
4、利用桥接实现不同宿主机间容器互联。
1、docker 安装并配置镜像加速
安装:
# 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]
国内镜像加速:
- 科大镜像:https://docker.mirrors.ustc.edu.cn/
- 网易:https://hub-mirror.c.163.com/
- 阿里云:https://<你的ID>.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
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 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 |
将文件从路径 |
如果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

浙公网安备 33010602011771号