概念

要了解docker首先要了解什么是镜像和容器以及他们之间的联系。

这里做一下简单阐述:容器是镜像的运行实例,可以使用同一个镜像运行多个容器;镜像是文件系统层和一些元数据的集合;层是文件变更的组合。容器运行着由镜像定义的系统,这些镜像有一个或者多个层加上一些docker的元数据构成。

如果熟悉面向对象原理的童鞋,看待镜像和容器时可以将镜像卡看作类而将容器看作对象。对象是类的具体实例,同样容器是镜像的实例。用户可以从单个镜像创建多个容器,就像对象一样,他们之间是相互隔离的,不论用户在对象中修改了什么都不会影响类的定义。

环境准备

1、这里我使用的服务器环境是CentOS7,之前有看到说Docker要求Centos系统内核版本高于3.10,所以大家在构建docker环境时需要注意检查系统内核的版本具体命令如下:

# uname -r

 2、更新yum包

# sudo yum update

3、安装需要的软件包

# sudo yum install -y yum-utils device-mapper-persistent-data lvm2

 4、设置安装docker的yum源

# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 5、查看docker版本,并选择需要安装的版本

# yum list docker-ce --showduplicates | sort -r

一个docker启动两个jar 一个dockerfile构建多个镜像_nginx

6、安装docker,docker分为ce版(社区版)和ee版(企业版)

# sudo yum install docker-ce   #通过这个命令会默认安装最新最稳定的版本

# sudo yum install docker-ce-19.03.1  #通过这个命令可以安装指定版本的docker

这里我安装了 docker-ce-19.03.1版本

一个docker启动两个jar 一个dockerfile构建多个镜像_docker_02

7、启动docker

1)通过systemctl启动

# sudo systemctl start docker  #该命令用于启动docker环境

# sudo systemctl enable docker #加入开机启动   

2)也可以通过service方式启动

 # service docker start

8、检查安装的docker版本以及验证docker是否安装成功了

 # docker version

一个docker启动两个jar 一个dockerfile构建多个镜像_centos_03

通过dockerfile构建容器

这里我通过Dockerfile构建以centos7为基础的包含java8的容器镜像

1、编写Dockerfile

# Base images 基础镜像

FROM centos:centos7

#MAINTAINER 维护者信息
MAINTAINER jing

#执行shell命令
RUN mkdir /usr/local/jdk

#工作目录
WORKDIR /usr/local/jdk
ADD jdk-8u151-linux-x64.tar.gz /usr/local/jdk

ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_151
ENV JRE_HOME /usr/local/jdk/jdk1.8.0_151/jre
ENV PATH $JAVA_HOME/bin:$PATH

2、获取jdk安装文件

这里我从jdk官网下载了jdk8的安装文件:jdk-8u151-linux-x64.tar.gz

一个docker启动两个jar 一个dockerfile构建多个镜像_nginx_04

3、执行docker build命令创建docker镜像

docker build --rm --tag centos_java:centos7 .

一个docker启动两个jar 一个dockerfile构建多个镜像_nginx_05

4、查看镜像是否创建成功

docker images

 

一个docker启动两个jar 一个dockerfile构建多个镜像_一个docker启动两个jar_06

可以看到有两个镜像其中centos为基础镜像,centos_java为基于centos创建的自定义镜像

5、执行docker run命令启动docker容器

 

# docker run -i -t -d -p 127.0.0.1:80:80 e5d9ea338e26 /bin/bash

一个docker启动两个jar 一个dockerfile构建多个镜像_nginx_07

 6、查看容器是否构建成功

 # docker ps

一个docker启动两个jar 一个dockerfile构建多个镜像_centos_08

7、进入docker查看Jdk是否安装成功

# docker exec -it f1f31acb10c1 /bin/bash

 

一个docker启动两个jar 一个dockerfile构建多个镜像_centos_09

这里基于centos7构建包含jdk8的docker容器已经构建成功。

8、这里在加个nginx的Dockerfile

# nginx Dockerfile
# Version 1.0

# Base images 基础镜像
FROM centos:centos7

#MAINTAINER 维护者信息
MAINTAINER jing

#ADD 获取nginx安装文件
ADD http://nginx.org/download/nginx-1.14.0.tar.gz .

#RUN 执行脚本命令
RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel
RUN useradd -M -s /sbin/nologin nginx
RUN tar -zxvf nginx-1.14.0.tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.14.0 && ./configure --prefix=/usr/local/nginx --user=niginx --group=nginx --with-http_stub_status_module && make && make install
RUN ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

#expose 映射端口
EXPOSE 80

#CMD 运行已下命令
CMD ["nginx"]