写在正文前
本博客是作者看了书籍《Docker技术入门与实战》后,在ubuntu虚拟机内进行实战操作后,发现了一些实际操作问题后,有感而发所写的,若有侵权,请联系博主协商解决。
实验环境:Win10宿主机上的ubuntu虚拟机,已安装Docker【如何安装Docker可查看其它教程】
Docker中有两种创建容器的方法:基于Docker commit命令和基于Dockerfile创建。
本博客选择基于Dockerfile的模式。
Dockerfile的基础镜像源自这篇博客。
1 创建工作目录
首先创建一个工作目录,叫做nginx_ubuntu_blog,并进入其中:
ag@ubuntu:~/studyDocker$ mkdir nginx_ubuntu_blog && cd nginx_ubuntu_blog
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$
接着创建Dockerfile文件与run.sh文件:
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ touch Dockerfile run.sh
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ ls
Dockerfile run.sh
2 编写run.sh脚本
脚本文件run.sh用来启动ssh服务和Nginx服务,内容如下:
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ cat run.sh
#! /bin/bash
/usr/sbin/sshd &
/usr/sbin/nginx
3 编写Dockerfile
Dockerfile文件用来创建Docker镜像,其内容如下:
FROM sshd:blog
MAINTAINER AlaGeek (24******03@qq.com)
#安装Nginx服务以及进行相关配置,以及安装tzdata【安装tzdata是为了后面的更改时区需要】
RUN \
apt-get install -y nginx && \
apt-get install -y tzdata && \
rm -rf /var/lib/apt/lists/* && \
echo "\ndaemon off; " >> /etc/nginx/nginx.conf && \
chown -R www-data:www-data /var/lib/nginx
#更改系统的时区设置,默认的ubuntu设置会对apache服务产生不好的影响
RUN echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
#添加脚本,设置权限
ADD run.sh /run.sh
RUN chmod 755 /*.sh
#挂载相关数据卷
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx"]
#设立工作目录
WORKDIR /etc/nginx
#设置自启动命令
CMD ["/run.sh"]
#开放80,443端口
EXPOSE 80
EXPOSE 443
4 创建镜像
在nginx_ubuntu_blog目录下执行命令【注意命令最后有一个 “.” ,表示Dockerfile文件在当前目录下】:
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ docker build -t nginx:blog .
执行成功的标志如下:
Successfully built f85cd655dd1d
Successfully tagged nginx:blog
说明nginx:blog镜像已经创建完毕,它的ID为f85cd655dd1d,也可用docker images命令查看镜像:
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx blog f85cd655dd1d 38 seconds ago 231MB
5 测试
使用如下命令,基于nginx:blog镜像启动一个容器:
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ docker run -d -P nginx:blog
a84ec8f6b19814e2c28a45479e1b2b9d61999027bba57762bb07508d634ddfe9
产生的字符串是该容器的ID,使用docker ps命令查看端口映射情况:
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a84ec8f6b198 nginx:blog "/run.sh" 3 seconds ago Up 1 second 0.0.0.0:32775->22/tcp, 0.0.0.0:32774->80/tcp, 0.0.0.0:32773->443/tcp practical_stallman
下面对该容器进行测试:
ag@ubuntu:~/studyDocker/nginx_ubuntu_blog$ curl 127.0.0.1:32774
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
返回页面正是Nginx服务的欢迎页面,测试成功。
这里需要注意的是,容器启动后,有三个端口映射,测试的时候要选择80端口对应的端口。