# cat /etc/redhat-release #查看版本号
CentOS Linux release 7.8.2003 (Core)
# uname -r #查看Linux内核
3.10.0-1127.el7.x86_64
yum install docker -y
# systemctl start docker #启动docker
# systemctl enable docker #开机启动docker
# systemctl status docker #查看docker状态
# docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64
Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64
Experimental: false
# docker search centos
# docker pull centos
由于下载链接是国外的,所以下载有些慢。
# docker images #查看有哪些镜像
# docker run -p 8000:80 --name mycentos -d centos
#-p指定服务器8000端口,映射容器80 web端口,容器名为mycentos -d 守护进程模式启动(因为容器必须有进程在运行,否则结束就挂)
# docker ps -a #查看所有运行过的容器
首先准备好tomcat与jdk解压到与Dockerfile同级的目录下, 构建文件命名必须为Dockerfile, 为什么同级, 因为build的时候会默认把当前的目录缓存进容器中。
FROM 0d120b6ccaa8
MAINTAINER hackenhu
ENV REFRESHED_AT 2020-10-28
WORKDIR /usr
RUN mkdir jdk tomcat
ADD jdk1.8.0_241 /usr/jdk
ADD tomcat8.5 /usr/tomcat
ENV JAVA_HOME=/usr/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]
FROM 本地已存在镜像ID(环境镜像)
MAINTAINER 作者
ENV REFRESHED_AT 设置最后更新的时间
WORKDIR 容器里面切换到 /usr 目录
RUN 在容器中运行的命令(建立tomcat和jdk两个文件夹)
ADD 将宿机中的jdk目录下的所有文件复制到容器中的/usr/jdk下(tomcat目录同理)
ENV 配置容器中环境变量
EXPOSE 指定相关程序端口
ENTRYPOINT 设置启动命令。
# docker build -t centos7-tomcat .
#注意最后的一个点,是必须要的
如果构建成功,会出现如下信息
信息很长,中间部分省略
……
……
Removing intermediate container e0ae9fc49741
Successfully built 6897bcc9890c
出现该信息,说明镜像构件成功
# docker run -it -d -p 8081:8080 --name tomcat centos7-tomcat
命令说明:
1. --name,这是指容器启动后显示的名称
2. 8081是该docker镜像运行的端口,8080是docker里面tomcat运行的端口
3. centos7-tomcat则是上面我构件镜像的名称
浏览器访问到tomcat的页面即说明启动成功
http://ip:8081
首先我们使用 docker ps -a 命令查看本机所有的容器。
使用 docker export 命令根据容器ID, 将镜像导出成一个文件。然后把这个镜像分发给其他人使用,比如作为基础软件的运行环境。
docker export f299f501774c > centos7-tomcat.tar
使用 docker import 命令则可将这个镜像文件导入进来。
docker import - newcentos7-tomcat < centos7-tomcat.tar
执行 docker images 命令可以看到镜像已经导入进来了
newcentos7-tomcat latest f299f501774c About an hour ago 633 MB
centos7-tomcat latest 6897bcc9890c About an hour ago 633 MB
docker.io/centos latest 0d120b6ccaa8 2 months ago 215 MB
wget https://download.docker.com/linux/static/stable/x86_64/docker-18.09.9.tgz
tar -xvf docker-18.09.9.tgz
cp docker/* /usr/bin/
vim /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
# chmod +x /etc/systemd/system/docker.service #添加文件权限并启动docker
# systemctl daemon-reload #重新加载配置文件
# systemctl start docker #启动Docker
# systemctl enable docker.service #设置开机自启
# systemctl status docker #查看Docker状态
# docker -v #查看Docker版本