通过Dockerfile创建镜像

Dockerfile

  •  Dockerfile语法格式

    –  FROM:基础镜像

    –  MAINTAINER:镜像创建者信息

    –  COPY:复制文件到镜像(所有文件复制场合)

    –  ENTRYPOINT:容器启动时执行的命令(CMD的内容将会作为参数传递给NENTRYPOINT)

    –  VOLUME:卷

    –  USER:指定当前用户(要事先创建目录)

    –  EXPOSE:开放的端口

    –  ENV:设置变量

    –  HEALTHCHECK:健康性检查

    –  ADD:复制文件到镜像(仅在需要自动解压缩的场合使用)

    –  RUN:制作镜像时执行的命令,可以有多个

    –  WORKDIR:定义容器默认工作目录(要事先创建目录)

    –  CMD:容器启动时执行的命令,仅可以有一条CMD

看容器内端口起没起:# docker top ed39b0c55906

ctrl+z  bg  后台运行并查看

排错:如果在启动容器的时候,提示iptables的相关问题,无法启动容器,可以执行以下操作:

(1)查看iptables是否正常

[root@room8pc30 ~]# iptables -t nat -nL  # 如果只看到有限的4个CHAIN,里面又没有规则,说明iptables有误

(2)关闭docker

[root@room8pc30 ~]# systemctl stop docker.service

(3)清空nat表

[root@room8pc30 ~]# iptables -t nat -F

(4)删除docker0网络

[root@room8pc30 ~]# ifconfig docker0 down

[root@room8pc30 ~]# brctl delbr docker0

(5)启动docker

[root@room8pc30 ~]# systemctl start docker.service

(6)查看iptables,如果发现多出了很多规则,意味着已经恢复默认配置

[root@room8pc30 ~]# iptables -t nat -nL

镜像优化:

1、每个容器只运行一个进程

2、不要假定容器能够久远保持启动状态

3、使用.dockerignore文件将不需要的文件进行排除。

4、不要完全自己制作镜像,应该使用官方提供的镜像

5、尽量减少镜像的层数。如不要运行多个RUN,而是将多个命令放到一个RUN中执行

运行最小的镜像

# docker run busybox echo Hello World

通过centos 基础境像制作一个新的镜像
配置yum
安装ifconfig
安装openssh-server httpd
设置sshd和httpd在运行容器时默认开启
通过root(密码123456)和ssh服务 可以远程连接容器
可以远程访问web
多台web共享数据 局域网内共享
物理机:
#mkdir /chroot
#yum -y install nfs-utils
#vim /etc/exports
/chroot 192.168.4.0/24(rw)
#systemctl start nfs

#ls -R/abc:
Dockerfile rh7.repo(yum仓库)   run.sh

#vim Dockerfile
FROM centos
MAINTAINER wangshu wangshu78123@163.com
RUN rm -rf /etc/yum.repos.d/*
ADD rh7.repo /etc/yum.repos.d/rh7.repo
RUN yum clean all
RUN yum repolist all
RUN yum -y install net-tools psmisc httpd openssh-server
RUN echo 123456 | passwd --stdin root
EXPOSE 22
EXPOSE 80
ADD run.sh /usr/sbin/run.sh
CMD ["/usr/sbin/run.sh"]

#vim run.sh
#!/bin/bash
EnvironmentFile=/etc/sysconfig/sshd
/usr/sbin/sshd-keygen &>/dev/null
/usr/sbin/sshd
EnvironmentFile=/etc/sysconfig/httpd
/usr/sbin/httpd -DFOREGROUND

#chmod 755 run.sh
#echo aaa > /chroot/index.html
#docker build -t myos .
#docker run -d -p 80:80 -p 10022:22 -v /chroot:/var/www/html myos

3  私有仓库

自定义镜像仓库和docker hub

registry基本概念

•  共享镜像的一台服务器(镜像化的一台服务器)

创建私有仓库

方法1

[root@s62 simple6]# vim /usr/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd --insecure-registry=192.168.122.2:5000  --registry-mirror=http://aad0405c.m.daocloud.io

方法2  

#cat /etc/docker/daemon.json

{
"insecure-registries" : ["192.168.2.10:5000"]
}

[root@s62 simple6]# systemctl daemon-reload(重载配置文件)

[root@s62 simple6]# systemctl restart docker

[root@s62 simple6]# docker run -id -p 5000:5000 registry    //启动容器映射端口

[root@s62 simple6]# docker tag a:label 192.168.122.2:5000/a:label   //打标签 /镜像a

[root@s62 simple6]# docker push 192.168.122.2:5000/a:label  上传

[root@s62 simple6]# docker rmi 192.168.122.2:5000/a:label   //先删除本地镜像

[root@s62 simple6]# docker run -itd  192.168.122.2:5000/a:label

[root@s62 simple6]# firefox  http://192.168.122.2:5000/v2/_catalog   //查看远程镜像

[root@s62 simple6]#firefox  http://192.168.122.2:5000/v2/_catalog /镜像名/tags/list  //查看镜像标签

部署Harbor私有镜像仓库

环境要求与准备

Harbor以容器的形式进行部署, 因此可以被部署到任何支持Docker的Linux发行版, 并且具备如下环境:

  • Python2.7+
  • Docker Engine 1.10+
  • Docker Compose 1.6.0+

这里使用CentOS7.3的系统, Python2.7系统自带了, 剩下的就是安装Docker和Compose:

[root@harbor01 ~]# yum install docker -y
[root@harbor01 ~]# yum -y install epel-release
[root@harbor01 ~]# yum install python-pip -y
[root@harbor01 ~]# pip install docker-compose (pip install -U -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose)
# 查看安装完成的Docker和Compose的版本
[root@harbor01 ~]# docker version
[root@harbor01 ~]#docker-compose --version

下载harbor包

wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz

openssl req -x509 -days 3650 -nodes -newkey rsa:2048 -keyout /data/cert/server.key -out /data/cert/server.crt

Common Name (eg, your name or your server's hostname) []: harbor.wangshu.cn   //域名

cd  harbor/ && ./prepare

./install.sh

启动Harbor 
解压完过后再harbor目录下有一个install.sh, 执行它来进行安装


[root@harbor01 harbor]# ./install.sh
[root@harbor01 harbor]# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver /harbor/start.sh Up
harbor-db /usr/local/bin/docker-entr ... Up 3306/tcp
harbor-jobservice /harbor/start.sh Up
harbor-log /bin/sh -c /usr/local/bin/ ... Up 127.0.0.1:1514->10514/tcp
harbor-ui /harbor/start.sh Up
nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
registry /entrypoint.sh serve /etc/ ... Up 5000/tcp

然后访问: https://harbor.wangshu.cn

访问harbor报错502 Bad Gateway

#tail -100 /var/log/harbor/adminserver.log


#tail -100 /var/log/harbor/jobservice.log

原因是我们指定的secretkey_path 路径创建的文件没有权限

还原设置secretkey_path的路径为/data

切换harbor的安装目录执行以下操作

[root@localhost harbor]#docker-compose down

[root@localhost harbor]#rm -rf /data/secretkey

[root@localhost harbor]#./prepare

[root@localhost harbor]#docker-compose up –d

登录时报错:

Error response from daemon: Get https://registry.niudingfeng.com/v1/users/: x509: certificate signed by unknown authority

此种情况多发生在自签名的证书,报错含义是签发证书机构未经认证,无法识别。

把harbor上的server.crt上传到任意docker上

chmod 644 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

cat server.crt >>/etc/pki/tls/certs/ca-bundle.crt

chmod 444 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

systemctl restart docker

证书是docker的daemon需要用到的,重启docker服务:

注意:

docker client解析不了域名的必须要加hosts

docker仓库和dockerfile的更多相关文章

  1. Docker镜像与仓库(二)Dockerfile

    Docker镜像文件与仓库(二) Docker镜像文件与仓库(二) Dockerfile指令 Dockerfile格式: 1.#Comment注释2.INSTRUCTION大写的指令名 argumen ...

  2. DockerFile构建镜像和Docker仓库

    利用commit理解镜像构成 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现 场等.但是,不要使用 docker commit 定制镜像,定制镜像应该 ...

  3. Docker(二):Dockerfile 使用介绍

    上一篇文章Docker(一):Docker入门教程介绍了 Docker 基本概念,其中镜像.容器和 Dockerfile .我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dock ...

  4. 搭建Harbor企业级docker仓库

    搭建Harbor企业级docker仓库 一.Harbor简介 1.Harbor介绍 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如 ...

  5. docker build 指定dockerfile

    1. Dockerfile文件使用 docker build命令会根据Dockerfile文件及上下文构建新Docker镜像.构建上下文是指Dockerfile所在的本地路径或一个URL(Git仓库地 ...

  6. docker入门1: Dockerfile介绍

    Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行 ...

  7. [转帖]Docker学习之Dockerfile命令详解

    Docker学习之Dockerfile命令详解 https://it.baiked.com/system/docker/2436.html 图挺好的 前言 之前,制作镜像的伪姿势搭建已经见过了,今天介 ...

  8. Docker(五):Dockerfile

    我们使用 Dockerfile 定义镜像,依赖镜像来运行容器,因此 Dockerfile 是镜像和容器的关键,Dockerfile 可以非常容易的定义镜像内容,同时在我们后期的微服务实践中,Docke ...

  9. Docker Command and Dockerfile

    镜像相关命令 # 下载镜像 docker pull xxx # 搜素镜像 docker search xxx # 查看已经下载了哪些镜像 docker images # 查看已下载镜像的id dock ...

随机推荐

  1. 谷歌BERT预训练源码解析(一):训练数据生成

    目录预训练源码结构简介输入输出源码解析参数主函数创建训练实例下一句预测&实例生成随机遮蔽输出结果一览预训练源码结构简介关于BERT,简单来说,它是一个基于Transformer架构,结合遮蔽词 ...

  2. CSS属性Display(显示)和Visibility(可见性)

    隐藏一个元素可以通过把display属性设置为“none”,或把visibility属性设置为“hidden”.但是请注意,这两种方法会产生不同的效果. Visibility:hidden可以隐藏某个 ...

  3. Websocket 简单对话:静态网页与pycharm对话

    WebSocket websocket 是一种在单个Tcp连接上进行双全工通信的协议.websocket通信协议于2011年被IETF定为标准RFC6455,并 由RFc7936补充规范.WebSoc ...

  4. 【Vue】基于nodejs的vue项目打包编译部署

    一·项目编译 1·进入项目目录下的终端执行命令 npm run build 正常情况如下图,如遇到错误不会编译成功,且编译后的html文件不能正常渲染. 2·编译完成后进入项目下的dist目录运行生成 ...

  5. springmvc 返回json数据给前台jsp页面展示

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  6. 2019-8-31-PowerShell-通过-WMI-获取系统信息

    title author date CreateTime categories PowerShell 通过 WMI 获取系统信息 lindexi 2019-08-31 16:55:58 +0800 2 ...

  7. 【原生JS】切换选项卡

    效果图: HTML: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...

  8. Java反射机制(四):动态代理

    一.静态代理 在开始去学习反射实现的动态代理前,我们先需要了解代理设计模式,那何为代理呢? 代理模式: 为其他对象提供一种代理,以控制对这个对象的访问. 先看一张代理模式的结构图: 简单的理解代理设计 ...

  9. Python--day41--事件和信号量之模拟连接数据库并在连接三次后抛出连接超时异常

    #事件被创建的时候#False状态 #wait()阻塞#True状态 #wait() 非阻塞#clear 设置状态为False#set 设置状态为True #数据库 --- 文件夹#文件夹里有好多ex ...

  10. 用生活例子来形象了解TCP-IP协议

    TCP/IP模型四层协议 与 邮件? 1.应用层——与用户直接打交道 类似 要寄的物件 2.传输层——处理和增加源数据并传输到IP层 类似 快递单信息 3.IP层——分配地址和传送数据 类似 分拣站分 ...