Docker镜像构建

一、docker镜像构建

1、环境准备

环境准备

IP			主机名			操作系统
192.168.56.11		linux-node1		centos7

注意:我这里使用的是centos7,如果是使用centos5或者centos6,需要升级操作系统内核,否则Docker的许多新功能都无法使用

2、构建方式

- 手动构建
- 自动构建,(通过Dockerfile方式)

3、删除原有镜像

为了防止干扰,将以前创建的容器全部删掉。

切记
切记
切记:生产环境慎用。 
否则真的会发生  从删除到跑路。。。

获取容器ID

[[email protected] ~]# docker ps -a -q #获取所有容器ID
4c37ade49a7a
1a0ec7a5b1a5
fd11374b2a58
cbc91bef8ea7
1b1113fe3b8e
c4c9b4947e61
17df7e2a5667
4d5a21ea94e0
d6e7283abf0a
7ada4ff8323a
c627741a7dc1
9476c8be9125

然后停掉所有的容器

[[email protected] ~]# docker kill $(docker ps -a -q)
4c37ade49a7a
1b1113fe3b8e
c4c9b4947e61
17df7e2a5667
c627741a7dc1
Failed to kill container (1a0ec7a5b1a5): Error response from daemon: Cannot kill container 1a0ec7a5b1a5: Container 1a0ec7a5b1a5d931f2f887ee2fb3680d9d56b109be37044414346269f2a0bf72 is not running
Failed to kill container (fd11374b2a58): Error response from daemon: Cannot kill container fd11374b2a58: Container fd11374b2a58741542c931a4eb661c6a8f3a230a13057d28a96e1cdb6c898530 is not running
Failed to kill container (cbc91bef8ea7): Error response from daemon: Cannot kill container cbc91bef8ea7: Container cbc91bef8ea779668a696046c1aa905ba2dc65e64ed5b403633b3284e00ec126 is not running
Failed to kill container (4d5a21ea94e0): Error response from daemon: Cannot kill container 4d5a21ea94e0: Container 4d5a21ea94e0df102198812fd899d8293198a2376dd5d952642113b76448ca65 is not running
Failed to kill container (d6e7283abf0a): Error response from daemon: Cannot kill container d6e7283abf0a: Container d6e7283abf0a7e423576df645ac36c35a691153d06d63439faf72d3ce3037529 is not running
Failed to kill container (7ada4ff8323a): Error response from daemon: Cannot kill container 7ada4ff8323a: Container 7ada4ff8323ad67e33fa4c52cd585a46cf9e62733505a54a7a7eb13cf33c0873 is not running
Failed to kill container (9476c8be9125): Error response from daemon: Cannot kill container 9476c8be9125: Container 9476c8be91256e20da7f567f5a261f3f754b736ab6402c714180db713e3d346b is not running

删除所有容器

[[email protected] ~]# docker rm $(docker ps -a -q)
4c37ade49a7a
1a0ec7a5b1a5
fd11374b2a58
cbc91bef8ea7
1b1113fe3b8e
c4c9b4947e61
17df7e2a5667
4d5a21ea94e0
d6e7283abf0a
7ada4ff8323a
c627741a7dc1
9476c8be9125

二、创建镜像

1、手动创建镜像

手动创建一个Nginx的镜像

[email protected] ~]# docker run --name mynginx -it centos #运行一个docker容器

[[email protected] /]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm   #配置epel源
Retrieving http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
warning: /var/tmp/rpm-tmp.QKhuVj: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:epel-release-7-8                 ################################# [100%]
[[email protected] /]# yum install -y nginx    #通过方式安装nginx

编辑nginx配置文件,让它前台运行
[[email protected] nginx]# cat /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/
daemon off;       #是否以守护进程的方式运行nginx,守护进程是指脱离终端并且在后头运行的进程,关闭守护进程执行的方式可以让我们方便调试nginx
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;

将镜像提交到本地

[[email protected] ~]# docker commit -m "my nginx" 312bc2c902da onepiece/mynginx:v1
sha256:273e37f59d87495c481ef8c23d32b33723103799aeb1194c1c632703fc70ad9f
提交到本地
-m是描述,后面跟容器ID ,onepiece是一个仓库名称

查看镜像

[[email protected] ~]# docker images     #可以看到我们刚才创建的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
onepiece/mynginx    v1                  273e37f59d87        4 minutes ago       261.9 MB

创建端口映射

[[email protected] ~]# docker run --name mynginxv1 -d -p 81:80 onepiece/mynginx:v1 nginx
3213254d75a9ab740c180cca295b427a408f8a50881cf844dfcc3f904751e53b
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                NAMES
3213254d75a9        onepiece/mynginx:v1   "nginx"             12 seconds ago      Up 11 seconds       0.0.0.0:81->80/tcp   mynginxv1

#使用之前创建的脚本登录到容器
[[email protected] ~]# ./docker_in.sh mynginxv1
[[email protected] /]# cd /var/log/nginx/
[[email protected] nginx]# ls
access.log  error.log
[[email protected] nginx]# cat access.log     #查看容器的访问日志
192.168.56.1 - - [19/Sep/2016:09:02:17 +0000] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"
192.168.56.1 - - [19/Sep/2016:09:02:17 +0000] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.56.11:81/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"

2、基于Dockerfile创建镜像

Dockerfile:是一种文本格式

首先我们先规划一下Dockerfile的所在目录,例如/opt/dockerfile/nginx

注意:D必须是大写。当使用Dockerfile构建镜像时,它会在当前目录下去读一个名称为Dockerfile的文件。

[[email protected] /opt/dockerfile/nginx]# cat Dockerfile 
#base images
FROM centos          #除了注释的第一行,必须是FROM centos,用于设置基础镜像 
#maintainer
MAINTAINER JackyWang  #维护信息
#Commands
RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install -y nginx && yum clean all         #RUN作为关键字,后面接要运行的命令
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
ADD index.html /usr/share/nginx/html/index.html  #ADD是关键字, 添加一个首页文件
#index.html是放在当前目录下
EXPOSE 80              #对外开放的是80端口
CMD ["nginx"]           #镜像启动时,启动的是nginx命令

写好Dockerfile后,我们开始构建

[[email protected] /opt/dockerfile/nginx]# docker build -t mynginx:v2 .
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM centos
 ---> 980e0e4c79ec
Step 2 : MAINTAINER JackyWang
 ---> Using cache
 ---> 33f84558f81d
Step 3 : RUN rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
 ---> Using cache
 ---> 21a39298e95b
Step 4 : RUN yum install -y nginx && yum clean all
 ---> Using cache
 ---> c16994d2c471
Step 5 : RUN echo "daemon off;" >> /etc/nginx/nginx.conf
 ---> Using cache
 ---> 39308efba34d
Step 6 : ADD index.html /usr/share/nginx/html/index.html
 ---> Using cache
 ---> 86464cc2b1d3
Step 7 : EXPOSE 80
 ---> Using cache
 ---> 89a262db6b6c
Step 8 : CMD nginx
 ---> Using cache
 ---> f735be220129
Successfully built f735be220129
从记录信息中我们可以看到docker每一步都做了什么

构建后运行容器,可以正常运行。

[[email protected] /opt/dockerfile/nginx]# docker run --name mynginxv2 -d -p 82:80 mynginx:v2
6ec8783771d6aa06ec0c8628c9fa643c47efcca8b698ab5f6a4dade5c3cb335d
时间: 2024-07-29 11:27:49

Docker镜像构建的相关文章

Docker镜像构建的优化总结

Docker镜像构建的优化总结 随着我们对docker镜像的持续使用,在此过程中如果不加以注意并且优化,镜像的体积会越来越多.很多时候我们在使用docker部署应用时,会发现镜像的体积至少有1G以上.镜像体积的增大,不单单会增加磁盘资源与网络资源的开销,也会影响应用的部署效率,使得应用的部署时间会越来越长.因此我们需要减少部署镜像的体积以加快部署效率,降低资源的开销.而对于镜像的优化,可以通过对dockerfile的优化来实现. 一.镜像最小化 1.选择最精简的基础镜像 选择体积最小的基础镜像可

asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行

1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加user数据库,添加tbusers表 2.创建asp.net core webapi 应用程序 参考Docker 为 ASP.NET Core WebApi 应用程序生成 Docker 映像,创建容器并运行,地址 http://www.cnblogs.com/heyangyi/p/9323407.htm

docker 镜像构建上下文理解

原文 写得贼好,特别鸣谢,哈哈 如果注意,会看到 docker build 命令最后有一个 . . . 表示当前目录,而 Dockerfile就在当前目录,因此不少初学者以为这个路径是在指定 Dockerfile 所在路径,这么理解其实是不准确的.如果对应上面的命令格式,你可能会发现,这是在指定上下文路径.那么什么是上下文呢? ??首先我们要理解 docker build 的工作原理.Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具.Docker 的引擎提供了一

Docker-通过docker-maven-plugin插件实现docker镜像构建并自动发布到远程docker服务器

我们知道,docker能实现应用打包隔离,实现快速部署和迁移.如果我们开发应用使用了spring cloud + spring boot架构,那么,通过docker-maven-plugin实现快速构建镜像并发布到远程docker服务器会非常方便.相关步骤参考如下: step1.开启docker服务器的tcp管理端口,这里以2375为例进行说明.具体的配置过程请参考另一篇博客:https://www.cnblogs.com/funnyboy0128/p/9983779.html step2.在本

Docker镜像构建上下文(Context)

镜像构建上下文(Context) Dicker在构建镜像时,如果注意,会看到 docker build 命令最后有一个 ... 表示当前目录,而 Dockerfile 就在当前目录,因此不少初学者以为这个路径是在指定 Dockerfile 所在路径,这么理解其实是不准确的.如果对应上面的命令格式,你可能会发现,这是在指定上下文路径.那么什么是上下文呢? 首先我们要理解 docker build 的工作原理.Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具.Doc

sqler sql 转rest api 的docker 镜像构建(续)使用源码编译

sqler 在社区的响应还是很不错的,已经添加了好多数据库的连接,就在早上项目的包管理还没有写明确, 下午就已经有go mod 构建的支持了,同时也调整下docker 镜像的构建,直接使用git clone + go mod 备注: go mod 是新的包管理方案,需要新版本的golang,使用容器就不存在这个问题了,同时对于国内 还有一个墙的问题,同时我push了1.7tag 的镜像,就是使用go mod 构建的. dockerfile FROM golang:alpine as build

使用 Docker 镜像构建 GO 语言环境

1. 安装 Docker 我当前使用的系统环境是 CentOS7 ,安装 Docker 使用的命令是 yum install docker*.至于其它系统,可以到百度查找其对应的安装方式. 2. 配置 Docker 镜像仓库的地址 目前来说,直接访问 Docker 官网的 DockerHub 会比较慢, 不过幸好现在国内出现了一些 DockerHub 的加速网站. 下面使用 ustc 加速器. 修改文件 /etc/docker/daemon.json,将其内容修改为 { "registry-mi

Hadoop的Docker镜像构建

1.Dockerfile ###Dockerfile -- beagin FROM ubuntu:trusty #MAINTAINER The Hue Team "https://github.com/cloudera/hue" RUN apt-get update -y RUN apt-get install -y software-properties-common RUN add-apt-repository -y ppa:webupd8team/java RUN apt-get

docker镜像构建以及导出save、导入load

前导:通过commit构建本地镜像,save保存镜像,load加载镜像1.通过commit构建镜像[[email protected] ~]# docker commit -p web1-p:表示在构建镜像的过程中,容器被暂停,web1是被构建的容器对象,及将运行名称为web1的容器打包为一个镜像2.查看构建的镜像,此时构建的镜像没有仓库名和标签3.为镜像添加仓库名和标签,并重新查看镜像4.将该镜像打包保存至本地linux根目录下[[email protected] ~]# docker sav