Docker安装及简单镜像制作

本文章为《云计算》课程实验总结,使用CentOS7安装Docker并进行简单镜像制作。

注意:Docker要求CentOS系统的内核版本高于 3.10,可使用uname -r查看系统内核。

 

1 Docker安装

(1)更新yum包

yum update

(2)安装依赖包

yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖。

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

(3)设置yum国内源,提升下载速度。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(4)安装Docker

①查看Docker仓库所有版本

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

②选择版本安装

yum install -y docker-ce-18.06.3.ce

(5)验证Docker是否安装成功

①启动Docker

systemctl start docker
#systemctl enable docker 加入自启动

docker version

有Client和Service代表安装成功。

 

2 测试实例 hello world

(1)下载hello-world image文件

docker image pull是抓取image文件的命令;library/hello-worldimage文件在仓库里面的位置。

docker image pull library/hello-world

docker images可查看本地docker镜像有哪些。

(2)运行hello-world image文件

docker container run hello-world

 

3 Docker镜像制作

利用镜像运行容器。本实例创建一个简单的apache服务器镜像,并通过镜像运行容器。

(1)创建工作目录

mkdir apache
cd apache

(2)创建并编写dockerfile文件

vi dockerfile并写入以下内容:

#基础镜像
FROM centos
​
#维护该镜像的用户信息
MAINTAINER The Centos Project<[email protected]>
​
#镜像操作指令安装 apache 软件包
#低版本centos需更新yum源,即加上下面这句
#RUN yum -y update
RUN yum -y install httpd
​
#开启 80 端口
EXPOSE 80
​
#复制index.html文件,并把它设置网站首页文件
ADD index.html /var/www/html/index.html
​
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
​
#启动容器时执行脚本
CMD ["/run.sh"]

(3)编写执行脚本run.sh

vi run.sh并写入以下内容:

#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

(4)创建apache服务首页页面index.html

vi index.html并写入以下内容:

<h1>Hello for Docker</h1>

(5)生成镜像

#docker build [选项] 路径
#-t:指定镜像的标签信息
docker build -t apache:centos . 
#'.'表示当前路径

查看本地镜像docker images

(6)利用镜像运行容器

①实现将本地端口 8080 映射到容器中的 80 端口

docker run -d -p 8080:80 apache:centos

②windows下使用浏览器访问虚拟机:IP:8080

注:如果发现无法访问虚拟机,应该是防火墙的问题。开放相应端口或关闭防火墙即可。

#方式一:允许8080端口流量
firewall-cmd --permanent --zone=public --add-port=8080/tcp    #防火墙开放8080端口:success代表设置成功
firewall-cmd --reload       #重新加载防火墙配置:success代表成功
firewall-cmd --zone=public --query-port=8080/tcp  #检查80端口配置是否生效:yes代表生效
​
#方式二:关闭防火墙
systemctl stop firewalld
systemctl disable firewalld