docker的部署安装:
[root@test ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@test ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 从17年开始,docker命名有个不同,出现了CE版本跟EE版本:CE是社区版(免费),EE是付费版(付费)
[root@test ~]# yum -y install docker-ce
# 然后进行一些简单的配置(镜像地址更改国内阿里)
[root@test ~]# mkdir -p /etc/docker
[root@test ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://jdnefphb.mirror.aliyuncs.com"]
}
EOF
[root@test ~]# systemctl daemon-reload
[root@test ~]# systemctl restart docker
[root@test ~]# docker -v # 查看是否是最新版本
Docker version 19.03.12, build 48a66213fe
接下来先写一个源码安装nginx的镜像dockerfile:
[root@test ~]# docker pull centos:7 # 先拉取个centos基础镜像,一会基于这个镜像写nginx
[root@test ~]# mkdir DockerImage # 创建目录方便存放文件,(做事要留根!!!)
[root@test ~]# cp nginx-1.8.1.tar.gz DockerImage/ # 把nginx tar包放到跟dockerfile同一目录
[root@test ~]# cd DockerImage/
dockerfile源码模板
[root@test DockerImage]# vim Dockerfile # 注意,文件名可以用Dockerfile(前面D字母要大写),也可以不用,下面我会分别说明用与不用的区别。
FROM centos:7
ADD nginx-1.8.1.tar.gz /usr/local/src
ADD http://mirrors.aliyun.com/repo/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
ADD http://mirrors.aliyun.com/repo/epel-7.repo /etc/yum.repos.d/epel.repo
RUN yum -y install pcre pcre-devel openssl openssl-devel gcc-c++ autoconf automake zlib-devel libxml2 libxml2-dev libxslt-devel gd-devel perl-devel perl-ExtUtils-Embed GeoIP GeoIP-devel GeoIP-data
WORKDIR /root
RUN useradd -M -s /sbin/nologin nginx
RUN cd /usr/local/src/nginx-1.8.1 && ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --user=nginx --group=nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_image_filter_module && make && make install
RUN echo 1 > /usr/local/nginx/html/index.html
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
dockerfile文件参数说明:
FROM:基于什么镜像生产的容器
ADD:把文件复制到容器里,如果是tar包便直接解压到指定目录,效果类似于tar zxvf name.tar.gz -C /root/,也可通过网络拉取文件,有wget命令的功能。
copy:单纯的cp命令,把文件原封不动的拷贝到容器里,与ADD的区别一比较就出来了。
RUN:在容器里执行的命令。
WORKDIR:工作目录。
ENV:容器系统环境。
EXPOSE:需要暴露的端口。
CMD:启动容器指定默认运行的程序。
ENTRYPOINT:类似于CMD,但是不会被docker run指令覆盖,两者可以配合使用。
构建镜像并启动验证
[root@test DockerImage]# docker build -t nginx1.8:v1 .
# 注意!后面有个点(.),.代表当前目录,docker会自动寻找Dockerfile命名的文件,这就是为什么上面要把文件命名为此的原因;当然也可以不这么命令,把.改成filename即可,比如:docker build -t nginx1.8:v1 <filename> 这样即可
# 基于镜像生成容器
[root@test DockerImage]# docker run -it --name test_nginx -p 88:80 -d nginx1.8:v1
bc8c703dbc4b7bd129e6989503f9c3b5261aab59d6f89b20fb900ef311fbc174
[root@test DockerImage]# docker ps # 查看容器运行是否健康
[root@test DockerImage]# curl http://127.0.0.1:88 # 访问刚才映射出宿主机的端口,验证是否成功