关键词:
Docker 镜像的创建方法
Docker 镜像除了是 Docker 的核心技术之外也是应用发布的标准格式。一个完整的 Docker 镜像可以支撑一个 Docker 容器的运行,在 Docker 的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果把已经安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像。
创建镜像的三种方法 :
- 基于已有的镜像创建
- 基于本地模板创建
- 基于 Dockerfile 创建 (推荐)
基于已有的镜像创建 :
基于已有的镜像创建主要使用 docker commit 命令。实质就是把一个容器里面运行的程序及该程序的运行环境打包起来生成新的镜像。
命令格式 :docker commit [选项] 容器ID/名称 仓库名称:[标签]
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行
[[email protected] ~]# docker images #已有的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos/httpd latest e23d3fcb4169 2 weeks ago 296MB
[[email protected] ~]# docker create -it centos/httpd /bin/bash #创建容器
8fc4cfb9a461d14526e44b3767810d893eec46363e30591ddaf644430ad03f66
[[email protected] ~]# docker ps -a #查看进程
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8fc4cfb9a461 centos/httpd "/bin/bash" 24 seconds ago Created keen_bhabha
[[email protected] ~]# docker commit -m "new" -a "haike" 8fc4cfb9a461 haike:test #创建新的镜像
sha256:e429fccbc44f20d1302fd1a77905d06b8614323c2da321607095c41c5f8ac58d
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
haike test e429fccbc44f 17 seconds ago 296MB
centos/httpd latest e23d3fcb4169 2 weeks ago 296MB
基于本地模板创建 :
通过导入操作系统模板文件可以生成镜像,模板可以从 OPENVZ 开源项目下载,下载地址 http://openvz.org/Download/template/precreated
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz #下载 debian 模板压缩包
cat debian-7.0-x86-minimal.tar.gz | docker import - haike:new #导入
docker images | grep new
基于 Dockerfile 创建 :
使用 Dockerfile 自动生成镜像,Dockerfile 是由一组指令组成的文件,其中每条指令对应 Linux 中的一条命令, Docker 程序将读取 Dockerfile 中的指令生成指定的镜像。
Dockerfile 结构大致分为四个部分 :基础镜像信息、维护者信息、镜像操作指令和容器指定启动时执行指令。
1.编辑 Dockerfile 文件 :
mkdir apache
cd apache
vim Dockerfile #固定格式
#基于的基础镜像
FROM centos #第一行必须指明所基于的镜像名称(本地不存在会自动从公共仓库下载)
#维护镜像的用户信息
MAINTAINER The porject <[email protected]>
#镜像操作指令安装apache软件
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]
Dockerfile 操作指令
指令 | 含义 |
---|---|
FROM 镜像 | 指定新镜像所基于的镜像,第一条指令必须为FORM指令,每创建一个镜像就需要一条FROM指令 |
MAINTAINER名字 | 说明新镜像的维护人信息 |
RUN 命令 | 在所基于的镜像上执行命令,并提交到新的镜像中 |
CMD["要运行的程序","参数1","参数2"] | 指定启动容器时要运行的命令或脚本,Dockerfile只能有一条CMD命令,如果指定多条则只执行最后一条 |
EXPOSE 端口号 | 指定新镜像加载到Docker时需要开启的端口 |
ENV 环境变量 变量值 | 设置一个环境变量的值,会被后面的RUN使用 |
ADD 源文件/目录 目标文件/目录 | 将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL |
COPY 源文件/目录 目标文件/目录 | 将本地主机上的源文件/目标复制到目标地点,源文件/目录要与Dockerfile位于相同目录中 |
VOLUME ["目录"] | 在容器中创建一个挂载点 |
USER 用户名/UID | 指定运行容器时的用户 |
WORKDIR 路径 | 为后续的RUN、CMD、ENTRYPOINT 指定工作目录 |
ONBUILD 命令 | 指定所生成的镜像作为一个基础镜像时所需要运行的命令 |
2.编写执行脚本 :
vim run.sh
#!/bin/bash
rm -rf /run/httpd/* #清除缓存
exec /usr/sbin/apachectl -D FOREGROUND #启动 httpd 服务
3.创建测试首页 :
echo "web test" > index.html
[[email protected] apche]# ls #三个文件必须在同一文件夹下
Dockerfile index.html run.sh
4.生成镜像 :
docker build -t httpd:centos . #注意有一个空格点 -t :指定镜像的标签信息
5.使用新的镜像运行容器 :
[[email protected] apche]# docker run -d -p 1213:80 httpd:centos #-p实现本地端口1213映射到容器80端口
ca6935190dcd0335a10ef008426df718a8443b1d7512057728894bdf3773996f
[[email protected] apche]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca6935190dcd httpd:centos "/run.sh" 8 seconds ago Up 7 seconds 0.0.0.0:1213->80/tcp modest_ritchie
8fc4cfb9a461 centos/httpd "/bin/bash" About an hour ago Created keen_bhabha
6.测试网页访问 :
构建私有仓库
1.使用 registry 搭建 :
[[email protected] ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
4064ffdc82fe: Pull complete
c12c92d1c5a2: Pull complete
4fbc9b6835cc: Pull complete
765973b0f65f: Pull complete
3968771a7c3a: Pull complete
Digest: sha256:51bb55f23ef7e25ac9b8313b139a8dd45baa832943c8ad8f7da2ddad6355b3c8
Status: Downloaded newer image for registry:latest
2.创建 json 文件 :
vim /etc/docker/daemon.json
"insecure-registries":["192.168.217.149:5000"] #本地IP地址
systemctl restart docker.service #重启服务
3.将本地目录挂载到容器内 :
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
#本地 容器 镜像名称
4.更改上传镜像标签 :
docker tag centos/httpd 192.168.217.149:5000/httpd
5.上传更改过标签镜像 :
[[email protected] ~]# docker push 192.168.217.149:5000/httpd
The push refers to a repository [192.168.217.149:5000/httpd]
f343a0957e4a: Pushed
a0478e9c2d36: Pushed
4da51a5114d3: Pushed
bcc97fbfc9e1: Pushed
latest: digest: sha256:e90736de0cd0c46c20dc8fb91e0c7a3f98863e8f3efde97a8d7bd455e5ac6e54 size: 1155
6.查看私有仓库 :
[[email protected] ~]# curl http://192.168.217.149:5000/v2/_catalog
"repositories":["httpd"]
Docker 数据管理
在 Docker 中,为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就涉及到容器的数据管理操作。
数据卷
数据卷是一个提供使用的特殊目录,位于容器中,可以将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。
1.挂载容器 :
[[email protected] ~]# docker run -v /var/www/:/data1 --name test -it centos /bin/bash
[[email protected] /]#
#宿主机目录/var/www 挂载容器中的/data1 目录不存在会自动创建 --name:给容器创建名称 -v:创建数据卷
2.测试同步 :
[[email protected] /]# cd data1/
[[email protected] data1]# ls
cgi-bin html
[[email protected] data1]# mkdir tset01
[[email protected] data1]# ls
cgi-bin html tset01
[[email protected] data1]# exit
exit
[[email protected] ~]# cd /var/www/
[[email protected] www]# ls
cgi-bin html tset01
数据卷容器
容器之间共享数据,最简单的方法就只使用数据卷容器。
[[email protected] ~]# docker run --name test01 -v /data1 -v /data2 -it centos /bin/bash
#在test01容器里创建两个文件夹
[[email protected] /]# ls
anaconda-post.log data1 dev home lib64 mnt proc run srv tmp var
bin data2 etc lib media opt root sbin sys usr
[[email protected] /]# exit
exit
[[email protected] ~]# docker run -it --volumes-from test01 --name db1 centos /bin/bash
#在db1容器里使用--volumes-from 命令挂载test01的目录
[[email protected] /]# ls
anaconda-post.log data1 dev home lib64 mnt proc run srv tmp var
bin data2 etc lib media opt root sbin sys usr
[[email protected] /]# cd data1
[[email protected] data1]# ls
[[email protected] data1]# mkdir test #创建文件夹测试
[[email protected] data1]# ls
test
[[email protected] data1]# exit
exit
[[email protected] ~]# docker exec -it test01 /bin/bash
#test01 容器需要创建、开启才能进入 已完成忽略
[[email protected] /]# ls
anaconda-post.log data1 dev home lib64 mnt proc run srv tmp var
bin data2 etc lib media opt root sbin sys usr
[[email protected] /]# cd data1/
[[email protected] data1]# ls
test
docker镜像的创建和私有仓库的创建(代码片段)
一、docker镜像的创建方法1、基于已有镜像创建2、基于本地模板创建3、基于dockerfile创建4、搭建私有仓库及其使用方法一、docker镜像的创建方法docker镜像是除了docker的核心技术之外,也是应用发布的标准格式。一个完整的docker镜... 查看详情
docker数据管理与网络通信之私有仓库建立(代码片段)
随着创建镜像日益增多,就需要有一个保存镜像的地方,这就是仓库。目前有两种仓库:公共仓库和私有仓库。最方便的就是使用公共仓库上传和下载镜像,下载公共仓库中的镜像不需要注册,但上传镜像到公共仓库是需要注册... 查看详情
docker进阶-搭建私有企业级镜像仓库harbor(代码片段)
为什么要搭建私有镜像仓库??对于一个刚刚接触Docker的人来说,官方的Dockerhub是用于管理公共镜像。既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像。我们可以非常方便的把我们自己镜像... 查看详情
docker搭建私有仓库之registry(代码片段)
Registry*有时候使用DockerHub这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。*docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。注:*随着docker使用的镜像越来越多,就需要有一个保存镜像的地方... 查看详情
docker------搭建本地私有仓库及horbor私有仓库(代码片段)
目录一.搭建本地私有仓库二.Docker--Harbor私有仓库部署与管理1.Harbor简介①什么是Harbor②Harbor的特性③Harbor的构成2.Harbor部署①部署Docker-Compose服务②部署Harbor服务③启动Harbor④查看Harbor启动镜像⑤创建一个新项目三.维护管理Harbor1... 查看详情
docker------搭建本地私有仓库及horbor私有仓库(代码片段)
目录一.搭建本地私有仓库二.Docker--Harbor私有仓库部署与管理1.Harbor简介①什么是Harbor②Harbor的特性③Harbor的构成2.Harbor部署①部署Docker-Compose服务②部署Harbor服务③启动Harbor④查看Harbor启动镜像⑤创建一个新项目三.维护管理Harbor1... 查看详情
docker搭建本地私有仓库(代码片段)
1.使用registry镜像创建私有仓库安装docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:dockerrun-d-p5000:5000registry:2这将自动下载并启动一个registry容器,创建本地的私有仓库服务。默认情况下,仓库会被创... 查看详情
docker镜像的创建和私有仓库的创建(代码片段)
一、docker镜像的创建方法1、基于已有镜像创建2、基于本地模板创建3、基于dockerfile创建4、搭建私有仓库及其使用方法一、docker镜像的创建方法docker镜像是除了docker的核心技术之外,也是应用发布的标准格式。一个完整的docker镜... 查看详情
docker私有镜像仓库搭建和镜像删除
参考技术Adocker私有镜像仓库一般用来存放公司内部的镜像,比如微服务中会有很多的服务需要放到自己公司内部的镜像仓库上,发布的时候直接从私有镜像仓库拉取。比如我公司的微服务部署在k8s环境上,微服务技术依然选择... 查看详情
docker—harbor私有仓库搭建(代码片段)
docker一、简介1.1概述1.2特性1.3构成二、部署服务2.1部署harbor服务准备工作2.2修改配置文件2.3启动harbor2.4查看启动镜像2.5创建新项目2.6在其他客户端上传镜像测试三、维护管理harbor3.1创建harbor用户3.2在client使用普通账户操作镜像3.3... 查看详情
docker—harbor私有仓库搭建(代码片段)
docker一、简介1.1概述1.2特性1.3构成二、部署服务2.1部署harbor服务准备工作2.2修改配置文件2.3启动harbor2.4查看启动镜像2.5创建新项目2.6在其他客户端上传镜像测试三、维护管理harbor3.1创建harbor用户3.2在client使用普通账户操作镜像3.3... 查看详情
私有仓库harbor的搭建(代码片段)
私有仓库Harbor的搭建一、Harbor简介虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的DockerRegistry管理项目,相比docker官方拥有... 查看详情
微服务架构师-docker私有镜像仓库的配置和使用(代码片段)
文章目录docker私有化仓库介绍私有仓库介绍私有镜像仓库有哪些有优点?实验环境规划使用registry搭建docker私有仓库初始化实验环境-安装docker开启包转发功能和修改内核参数配置xuegod64为docker私有仓库服务端配置xuegod63上的doc... 查看详情
linux运维容器篇docker私有仓库harbor生产搭建(代码片段)
...r仓库简介简介和registry对比核心组件二部署harbor仓库安装dockercompoasdocker-ceserver端安装harbor检查结果访问web界面添加项目创建用户server控制台端登陆上传镜像登录上传镜像其他客户端上传镜像解决一harbor仓库简介简介harbor是docke的... 查看详情
在docker中创建私有仓库(代码片段)
仓库简介随着创建的镜像日益增多,就需要有一个保存镜像的地方,这就是仓库。目前有两种仓库:公共仓库和私有仓库。最方便的就是使用公共仓库上传和下载镜像,下载公共仓库中的镜像不需要注册,但上传镜像到公共仓库... 查看详情
docker--镜像仓库(搭建私有镜像仓库向镜像仓库推送镜像从镜像仓库拉取镜像)(代码片段)
...荐)2.2带有图形化界面版本(推荐)2.2.1配置Docker信任地址2.2.2使用DockerCompose部署带有图象界面的DockerRegistry3.向镜像仓库推送镜像4.从镜像仓库拉取镜像1.镜像仓库1.1镜像仓库概念2.搭建私有镜像仓库搭建镜像仓库可以... 查看详情
docker搭建私有仓库
...确定你服务器的5000端口没有被占用下载registry镜像并运行dockerrun-d–p5000:5000 查看详情
docker教程-8-dockerhub仓库及私有仓库的使用(代码片段)
目录1、DockerHub镜像仓库的使用1.1注册账号并登录1.2创建一个公开/私有仓库1.3 在命令行中登录/退出DockerHub1.4 对本地镜像打tag编号1.5 将镜像推送到DockerHub的Registry1.6 从DockerHub下载镜像到本地2、私有仓库的搭建和使用2.1使用dock... 查看详情