文章目录

  • 一、手动制作docker镜像
    • 1.制作一个基于centos7系统的nginx镜像(单服务)
    • 2.制作nginx+ssh双服务的镜像
    • 3.制作一个基于centos6系统的kod网盘的镜像(多服务)
  • 二、自动制作docker镜像
  • 三、docker镜像的分层(复用,节省空间)
  • 四、dockerfile的优化
  • 五、容器间的互联
  • 六、单机版的容器编排

一、手动制作docker镜像

1.制作一个基于centos7系统的nginx镜像(单服务)

1:启动一个基础容器centos7
docker run -it -p 80:80 centos:7 /bin/bash2:在容器中正常安装服务
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install nginx  -y
nginx (无法使用systemd来启动服务)
rm -fr /usr/share/nginx/html/index.html
echo 'oldboy' >/usr/share/nginx/html/index.html
exit3:把安装好服务的容器提交为镜像
docker container commit 292453bd62f1 centos7_nginx:v14:测试
docker run -d -it -p 82:80 centos7_nginx:v1 nginx -g 'daemon off;'

2.制作nginx+ssh双服务的镜像

1:启动一个基础容器
docker run -it -p 80:80 -p 1022:22  centos7_nginx:v1 /bin/bash2:在容器中正常安装服务
yum install openssh-server -y
yum install initscripts -y
/usr/sbin/sshd-keygen
/usr/sbin/sshd
echo '123456'|passwd --stdin rootvim  /init.sh
#!/bin/bashnginx
/usr/sbin/sshd -D
服务
3:把安装好的容器提交为镜像
docker commit bb16eb415b3e centos7_nginx_ssh:v14:测试
docker run -d -p 82:80 -p 1024:22 centos7_nginx_ssh:v1 /bin/bash /init.sh
[root@docker01 ~]# curl 10.0.0.11:82
oldboy
[root@docker01 ~]# ssh root@10.0.0.11 -p1024

3.制作一个基于centos6系统的kod网盘的镜像(多服务)

kod的应用环境
nginx 1.16+php 5.4centos 7容器
yum install nginx php-fpm php-mbstring.x86_64 php-gd -ycentos_nginx容器
yum install  php-fpm php-mbstring.x86_64 php-gd -y1:启动一个centos7_nginx:v1,再安装php
yum install php-fpm php-gd php-mbstring -y
vi /etc/php-fpm.d/www.conf
php-fpm -D
grep -Ev '^$|#' /etc/nginx/nginx.conf.default
grep -Ev '^$|#' /etc/nginx/nginx.conf.default >/etc/nginx/nginx.confvi /etc/nginx/nginx.confnginx -tnginx
mkdir /html
cd /html
yum install unzip -y
unzip kodexplorer4.40.zip
chown -R nginx:nginx .
​
vi /init.sh
#!/bin/bash
​
php-fpm -D
nginx -g 'daemon off;'
​
2:把安装好服务的容器,提交为镜像
docker commit 47208e3e3796 kod:v2
3:测试镜像的功能
docker run -d -p 83:80 kod:v2 /bin/bash /init.sh

二、自动制作docker镜像

镜像: 中药

dockerfile: 配方

dockerfile常用指令

FROM  基础镜像
RUN   制作镜像过程中需要的执行命令(安装服务)
CMD   容器启动的时候执行的初始命令,容易被替换(启动服务)
ENTRYPOINT  容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,cmd命令将作为ENTRYPOINT命令的参数
ADD   把dockerfile当前目录下的文件拷贝到容器中(自动解压tar包)
COPY  把dockerfile当前目录下的文件拷贝到容器中(不解压tar包)
WORKDIR 指定容器的默认工作目录(类似cd)
EXPOSE  镜像要暴露的端口(docker run -P大写)
VOLUME  持久化卷(自动创建随机名字的卷)
ENV     环境变量(ssh的密码,数据库的密码)
LABEL       镜像的属性标签
MAINTAINER  管理者标识

根据dockerfile自动构建镜像的思路

a:手动制作docker镜像,记录历史命令
b:根据历史命令编写dockerfile文件
c:docker build构建docker镜像
d:测试镜像的功能

dockerfile单服务例子1 nginx:

[root@docker01 centos7_nginx]# vim dockerfile
FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx  -y
RUN rm -fr /usr/share/nginx/html/index.html
RUN echo 'oldboy' >/usr/share/nginx/html/index.htmlCMD ["nginx","-g","daemon off;"]提交镜像
docker  build -t centos7_nginx:v1  .验证:
docker run -d -p 80:80 centos7_nginx:v1

dockerfile使用环境变量的例子:

FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx openssh-server initscripts -y
RUN /usr/sbin/sshd-keygen
ADD init.sh  /init.sh
ENTRYPOINT ["/bin/bash","/init.sh"]
​
vi  init.sh
#!/bin/bash
if [ -z $SSH_PWD ];thenSSH_PWD=$1
fi
​
echo $SSH_PWD|passwd --stdin root
nginx
/usr/sbin/sshd -D

自动制作kod可道云镜像

编辑dockerfile文件
[root@docker01 kod]# vim dockerfile
FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo && \
yum install unzip nginx php-fpm php-gd php-mbstring -y && \
yum clean all && yum makecache
ADD www.conf /etc/php-fpm.d/www.conf
ADD nginx.conf /etc/nginx/nginx.conf
RUN mkdir /html
WORKDIR /html
COPY kodexplorer4.40.zip .
RUN unzip kodexplorer4.40.zip
RUN chown -R nginx:nginx .
COPY init.sh /
RUN chmod a+x /init.shCMD ["sh","-c","/init.sh"]在kod目录下准备相应的文件,在手动制作的容器中获取相应文件
docker cp 1415ccb2f1ca:/etc/php-fpm.d/www.conf .
docker cp 1415ccb2f1ca:/etc/nginx/nginx.conf .
将kodexplorer4.40.zip上传提交镜像
docker  build -t centos7_nginx_kod:v1  .验证启动容器
docker run -d -p 80:80 centos7_nginx——kod:v1

三、docker镜像的分层(复用,节省空间)

四、dockerfile的优化

a: 使用体积小的linux镜像alpine(镜像小,上传快,下载快 )
b:尽可能的清理无用的缓存文件(尽可能把多个RUN合并)
c:修改dockerfile的时候,尽可能把修改的内容放在最后
d:使用.dockerignore忽略构建docker镜像时,不需要的文件

五、容器间的互联

docker run --link 正在运行容器的名字(单方向)

启动zabbix容器 旧版本命令
docker run --name mysql-server -it \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \-d mysql:5.7 \--character-set-server=utf8 --collation-server=utf8_bindocker run --name zabbix-java-gateway -t \-d zabbix/zabbix-java-gateway:latestdocker run --name zabbix-server-mysql -t \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \--link mysql-server:mysql \--link zabbix-java-gateway:zabbix-java-gateway \-p 10051:10051 \-d zabbix/zabbix-server-mysql:latestdocker run --name zabbix-web-nginx-mysql -t \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \--link mysql-server:mysql \--link zabbix-server-mysql:zabbix-server \-p 80:80 \-d zabbix/zabbix-web-nginx-mysql:latest
启动zabbix容器 新版本命令(官网有坑,已改)
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-netdocker run --name mysql-server -t \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \--network=zabbix-net \--restart unless-stopped \-d mysql:8.0 \--character-set-server=utf8 --collation-server=utf8_bin \--default-authentication-plugin=mysql_native_passworddocker run --name zabbix-java-gateway -t \--network=zabbix-net \--restart unless-stopped \-d zabbix/zabbix-java-gateway:alpine-5.0-latestdocker run --name zabbix-server-mysql -t \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \--network=zabbix-net \-p 10051:10051 \--restart unless-stopped \-d zabbix/zabbix-server-mysql:alpine-5.0-latestdocker run --name zabbix-web-nginx-mysql -t \-e ZBX_SERVER_HOST="zabbix-server-mysql" \-e DB_SERVER_HOST="mysql-server" \-e MYSQL_DATABASE="zabbix" \-e MYSQL_USER="zabbix" \-e MYSQL_PASSWORD="zabbix_pwd" \-e MYSQL_ROOT_PASSWORD="root_pwd" \--network=zabbix-net \-p 80:8080 \--restart unless-stopped \-d zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest

六、单机版的容器编排

yum install docker-compose -y(需要epel源 curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo)

容器编排,批量管理一组容器的方法
单机 ssh 安装服务
集群 批量 安装服务 ansible yaml

docker-compose.yaml 描述docker如何启动一组容器

docker-compose up -d 创建并启动
docker-compose start 全部启动
docker-compose stop 全部停止
docker-compose restart
docker-compose down 停止并删除 卸载
docker-compose scale zabbix-java-gateway=3


[root@docker01 dockerfile]# cd docker-compose/
[root@docker01 docker-compose]# ls
docker-compose.yaml  docker-compose.yml.bak
[root@docker01 docker-compose]# vim docker-compose.yml
version: '3'
​
services:mysql-server:image: mysql:5.7restart: alwaysenvironment:MYSQL_ROOT_PASSWORD: root_pwdMYSQL_DATABASE: zabbixMYSQL_USER: zabbixMYSQL_PASSWORD: zabbix_pwdcommand: --character-set-server=utf8 --collation-server=utf8_binzabbix-java-gateway:image: zabbix/zabbix-java-gateway:latestrestart: alwayszabbix-server:depends_on:- mysql-serverimage: zabbix/zabbix-server-mysql:latestrestart: alwaysenvironment:DB_SERVER_HOST: mysql-serverMYSQL_DATABASE: zabbixMYSQL_USER: zabbixMYSQL_PASSWORD: zabbix_pwdMYSQL_ROOT_PASSWORD: root_pwdZBX_JAVAGATEWAY: zabbix-java-gatewayports:- "10051:10051"zabbix-web-nginx-mysql:depends_on:- zabbix-serverimage: zabbix/zabbix-web-nginx-mysql:latestports:- "80:80"restart: alwaysenvironment:DB_SERVER_HOST: mysql-serverMYSQL_DATABASE: zabbixMYSQL_USER: zabbixMYSQL_PASSWORD: zabbix_pwdMYSQL_ROOT_PASSWORD: root_pwd

docker容器2:镜像制作相关推荐

  1. docker 分布式 lnmp 镜像制作

    docker 分布式 lnmp 镜像制作 一.docker 分布式 lnmp 镜像制作 1.运行Nginx.MySQL.PHP容器 2.修改Nginx配置文件和PHP文件 4.进行测试 虚拟机输入lo ...

  2. Docker Java程序镜像制作

    Docker Java程序镜像制作 制作前的准备 jre:不需要完整的jdk,jre即可,到Oracle进行下载即可,下载链接,根据自己的情况进行选择,这里选择jre-8u221-linux-x64. ...

  3. Docker 容器里镜像的迁移,或者将修改后的新的容器重新做成一个镜像

    ----继上次docker制作nginx容器... [Docker  容器里镜像的迁移,或者将修改后的新的容器重新做成一个镜像,] 1.进入容器里nginx镜像里. 2.写测试内容到nginx的默认首 ...

  4. Docker容器之镜像仓库详解

    Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解 1. 什么是Docker Image? 2. 什么是Docker Registry? 3. 镜像相关的操作 本文将集中对镜像. ...

  5. Docker笔记——jdk镜像制作

    Docker笔记--jdk镜像制作 openjdk镜像依赖如下: openjdk:8-jdk -> buildpack-deps:jessie-scm -> buildpack-deps: ...

  6. docker容器和镜像的区别

    学习目标: docker容器和镜像的区别(持续更新) 学习内容: 1.docker容器基本概念与运用 2.docker镜像基本概念与运用 3.docker容器和镜像同点 4.docker容器和镜像异点 ...

  7. Docker版OnlyOffice镜像制作

    Docker版OnlyOffice镜像制作 一.环境准备 1.电脑要求 1.宿主机内存16G以上,CPU4核8线程以上,老爷机建议直接放弃 2.虚拟机系统用ubuntu18.04,处理器核心保证2✖2 ...

  8. Docker容器技术 |镜像原理 |数据卷 |数据卷容器

    文章目录 一.Docker镜像介绍 二.镜像的commit操作补充 三.Docker数据卷 数据卷的理念:持久化+数据共享 方式1:直接添加数据卷 方式2:使用DockerFile添加数据卷 四.Do ...

  9. k8s mysql容器镜像_kubernetes(二)之Docker容器及镜像

    容器及镜像 容器 常见的容器状态 running stopped paused created deleted 注意: 查看docker状态使用的命令: docker ps: 查看running状态的 ...

  10. Docker2 docker commit方法镜像制作

    一.前期准备 1.下载一个centos镜像,进入容器,安装wget docker pull centos docker run -it centos bash [root@web1 ~]# docke ...

最新文章

  1. VScode配置ROS环境
  2. MySql各种锁机制的学习
  3. 如何找出错误ora-07445发生时系统执行的语句
  4. scikit-learn algorithm cheat sheet【汉化版】
  5. 服务器2012r2系统安装数据库,数据库图文详解Windows Server2012 R2中安装SQL Server2008...
  6. Android之如何解决ScrollView起始位置不是最顶部的解决办法
  7. 中fifo算法_java线程池,工作窃取算法
  8. oracle8 as sysdba,Oracle 8i 密码验证
  9. ensprip引入静态路由_IP路由基础理论知识详解(三)
  10. denali vip使用经验
  11. JDK 8 函数式编程入门
  12. Java每日一题——>739. 每日温度(蛮力法,栈方法)
  13. android端播放器框架,Android通用播放器解码框架Vitamio的介绍和使用
  14. 伊宅购集团伊家田园勠力同心数字农业项目说明会圆满举行!
  15. FreeBSD ZFS
  16. 使用Python对植物大战僵尸学习研究
  17. 机器人系统的基本概念及外部模型参数详解
  18. 一个研发管理使命、愿景、价值观的案例
  19. #define定义宏常量和宏函数
  20. grub2详解(翻译和整理官方手册)

热门文章

  1. 平面向量内积坐标公式推导_向量内积的坐标表示.ppt
  2. dropbox for android,Dropbox
  3. 网页视频下载:怎么批量下载网页上的视频
  4. android:enabled=true service,Manifest中android:enabled和android:exported标签
  5. 贴片晶振为智能手环带来了哪些功能?
  6. 原 Android studio下的DNK开发JNI详解流程
  7. Excel表格中选择性粘贴如何粘贴为数值
  8. 2019计算机世界语言排名,2019程序语言排行_2019 年 8 月编程语言排行榜
  9. 很多人在睡觉的时候半梦半醒时,感…
  10. 三流大学和一流大学学生的简历有什么区别?