通过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. GPU版TensorFlow怎么指定让CPU运行

    由于某些原因GPU版的TensorFlow运行起来会出现一些问题,比如内存溢出等情况.此时我们可以用CPU和系统内存来运行我们的程序. 代码如下: import osos.environ[" ...

  2. mac上的mysql管理工具sequel pro

    https://blog.csdn.net/wan_zaiyunduan/article/details/54909389 以前用过Plsql.Navicat.Workbench,现在换到mac上,用 ...

  3. PPP验证对比

  4. js基础——function类型

    1.函数声明方式 1)普通声明方式  function box(num1,num2){       return num1 + num2;  } 2)使用变量初始化函数 var box = funct ...

  5. linux 禁止单个中断

    有时(但是很少!)一个驱动需要禁止一个特定中断线的中断递交. 内核提供了 3 个函数为 此目的, 所有都声明在 <asm/irq.h>. 这些函数是内核 API 的一部分, 因此我们描述它 ...

  6. 51nod 1287加农炮

    1287 加农炮  题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 一个长度为M的正整数数组A,表示从左向右的地形高度.测试一种加农炮 ...

  7. EJB版本

    1999: ejb version 1.1 -- j2ee 1.22001: ejb version 2.0 -- j2ee 1.32003: ejb version 2.1 -- j2ee 1.42 ...

  8. Linux 内核bin+attribute 结构二进制属性

    sysfs 惯例调用所有属性来包含一个单个的人可读文本格式的值. 就是说, 只是偶然地很 少需要来创建能够处理大量二进制数据的属性. 这个需要真正地只出现在必须传递数据, 不可动地, 在用户空间和设备 ...

  9. linux PCI 寻址

    每个 PCI 外设有一个总线号, 一个设备号, 一个功能号标识. PCI 规范允许单个系统占 用多达 256 个总线, 但是因为 256 个总线对许多大系统是不够的, Linux 现在支持 PCI 域 ...

  10. 移动端H5多页开发拍门砖经验

    两年前刚接触移动端开发,刚开始比较疑惑,每次遇到问题都是到社区里提问或者吸取前辈的经验分享,感谢热衷于分享的开发者为前端社区带来欣欣向上的生命力.本文结合先前写的文章和开发经验分享给大家,希望也能帮助 ...