docker—dockerfile、自动/手动创建镜像

1、dockerfile创建镜像的流程如下

1.1  建立一个dockerfile命名的文件,往里面写东西    vim  /opt/dockerfile

1.2  写完后构建镜像    dockerfile  build   .     (. 表示当前目录下的dockerfile的所处位置)

1.3  修改镜像名    docker  image  tag   镜像名称: 镜像标签   新镜像名称: 新的标签 

1.4  运行镜像  docker run  .......

注意:docker 不是虚拟机,虚拟机的程序运行基本都是后台运行,利用 systemctl 命令

而容器运行必须要在前台,没有后台进程的概念,不能使用 systemctl



2、常用的dockerfile指令(都要大写)

from:指定基于哪个基础镜像  centos:6.8

run:  制作镜像的操作指令  yum -y install tomcat

cmd:运行镜像生成容器后需要执行的命令  nginx -s  reload

         一个dockerfile至多只能有一个cmd,如果有多个,只有最后一个生效。

entrypoint:作用和CMD一样,容器执行的命令

(dockerfile 中同时出现 cmd 和 entrypoint 时,把 CMD 的内容当作参数传递给 entrypoint )

copy:添加宿主机的文件到容器内,不会自动解压 tar 包,仅拷贝(保留源文件的元数据,如权限

add:添加宿主机的文件到容器内,会自动解压 tar 包

workdir :指定工作目录

volume:指定存储卷 

expose:指定暴露的端口

env:设置环境变量

label:为镜像打标签

mkdir -pv  dockerfile/{nginx,tomcat,httpd} #同时创建多个目录,-v 显示版本信息,在当前root目录下

cd  dockerfile/nginx  &&  yum -y install vim  #装一个 vim 的包

pwd  &&  vim Dockerfile   #查看当前路径建立一个Dockerfile文件

  FROM centos:7     
  
  RUN  mv /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.backup && \    # 把官方的源mv改名作为备份
       curl -o /etc/yum.repos.d/CentOS-Base.repo  https://mirrors.aliyun.com/repo/Centos-7.repo && \    #下载阿里云源
       sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d'  /etc/yum.repos.d/CentOS-Base.repo  && \   #把阿里内网源删除 
       curl -o /etc/yum.repos.d/epel.repo  https://mirrors.aliyun.com/repo/epel-7.repo	#下载阿里的epel源
                             
  RUN   yum -y install nginx  && rm -rf /var/cache/yum   # &&表示同时进行,\表示换行符,都是一行命令,可以有多个RUN,#删除缓存,减小镜像大小

  CMD  nginx -g "daemon off;"

docker image build  --help  #查看创建镜像的相关信息

docker image build -t 镜像名 .  #在当前路径下创建镜像并指定名称

在创建镜像时,会生成临时镜像,不要清除临时镜像(有可能后面的镜像依赖前面的临时镜像)

docker container ps -l  #查看最近的容器的状况



3、docker 镜像的优化思路

(1)利用缓存提高编译速度—利用缓存,将不经常变更的指令放在靠前的位置;合并多条命令减小镜像层数

(2)减小镜像体积—删除无用的缓存、使用较小的基础镜像



4、手动制作镜像

 4.1  手动制作单服务的Nginx镜像

docker container run -it -p 80:80 centos:7 /bin/bash   #创建一个基础容器

进入到容器后,更换容器的yum为阿里云源

cd /etc/yum.repos.d

yum -y install wget  &&  wget https://mirrors.aliyun.com/repo/    #下载阿里云的镜像源

wget https://mirrors.aliyun.com/repo/epel-7.repo     #下载 epel-7.repo 源用于安装 nginx

yum clean all && yum makecache  && yum repolist   

yum -y install nginx  &&  yum -y install net-tools  #安装 nginx、 网络包

nginx     #运行nginx  (systemctl status nginx  报错,缺少d-b进程;nginx -h 看帮助信息),

netstat -nutlp  #查看nginx端口号80及网络进程

nginx -V  && cd /usr/share/nginx   #查看nginx版本及其他信息后,进入到nginx里面

ls -l html && rm -rf html/index.html && echo 123 > html/index.html  #默认html指向的是一个软链接,删除index.html

ifconfig  && curl 172.17.0.3     #出现123(ifconfig 查看出来的容器ip是172.17.0.3)

cat /etc/yum.conf  &&  rm -rf /var/cache/yum   #删除缓存,减小镜像大小

至此,基础nginx镜像已制作完成,准备提交为新的镜像,退出容器。

docker container ps -sl   # s指的是size ,列出容器列表及大小

docker container commit  --help   #查看容器提交帮助选项 

docker container commit 88614be89fac nginx-new:v1201   #提交仓库作为新镜像

docker images   #查看镜像


基于新镜像创建容器

docker container run -it -p 80:80  nginx-new:v1201 nginx -g 'daemon off;'   #创建镜像后启动,daemon off 表示前台启动

netstat -nutlp  #可以看到 nginx 已经在运行

top  #查看是否 nginx 运行成功



4.2  手动制作多服务的Nginx镜像:Nginx+sshd

在以上已经创建好单服务的镜像中创建容器

docker container run -it nginx-new:v1201   #创建一个镜像,没指定启动 nginx 服务

netstat  -nutlp  查看 nginx 服务没启动
 
yum -y install openssh-server && yum -y install initscripts  #装启动 sshd 服务的包和依赖

/usr/sbin/sshd-keygen  #生成 sshd 的 key

/usr/sbin/sshd    #启动 sshd 的后台服务   (/usr/sbin/sshd -D 是前台服务,会卡住)

vim /ngxin-ssh-start.sh  #编写运行脚本

   #!/bin/bash

  #nginx -g "daemon off;"
  #backend operation
  nginx -g "daemon on;"             

  mima = $1
  if [ -n "$mima" ]; then
     echo $mima | passwd --stdin root
  else
     echo 123 | passwd --stdin root
  fi

  #backend operation
  /usr/sbin/sshd -D

chmod +x /nginx-ssh-start.sh

cat /etc/yum.conf && rm -rf /var/cache/yum  #删除 yum 的缓存,减小容器大小,打包的镜像就小

【docker container commit 容器名  镜像名     #新开标签提交镜像  
  docker images                  #查看镜像
  docker container run -itd 4634a139d281 /nginx-ssh-start.sh  6666 #创建并启动一个容器,指定密码
  docker container ps -l  #查看最近的容器
  docker container top 容器名  #查看容器进程】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值