GVKun编程网logo

搭建自己的 docker 镜像(搭建自己的docker镜像仓库)

8

在本文中,我们将为您详细介绍搭建自己的docker镜像的相关知识,并且为您解答关于搭建自己的docker镜像仓库的疑问,此外,我们还会提供一些关于3-5构建自己的docker镜像、8天入门docker

在本文中,我们将为您详细介绍搭建自己的 docker 镜像的相关知识,并且为您解答关于搭建自己的docker镜像仓库的疑问,此外,我们还会提供一些关于3-5 构建自己的docker 镜像、8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry、docker Dockerfile文件制作自己的镜像的方法、docker dockerfile构建自己的tomcat镜像的有用信息。

本文目录一览:

搭建自己的 docker 镜像(搭建自己的docker镜像仓库)

搭建自己的 docker 镜像(搭建自己的docker镜像仓库)

手动构建

1. 关键字查找镜像

sudo docker search centos

2. 下载基本镜像

sudo docker pull centos

3. 启动容器

sudo docker run -d -it --name centos1 -h centos1 -p 91:80 -v /home/root:/my_python -w my_python centos /bin/bash
# 查看已经启动的docker
docker container ls

4. 进入容器

sudo docker exec -it 容器id /bin/bash

5. 进入更新软件

apt-get update

6. 安装软件

yum install -y gcc   等

7. 退出

exit

8. 停止容器

docker stop 容器id

9. 提交镜像

sudo docker commit -m "python3" 73795020d9d8 ubuntu-python3:3.5
73795020d9d8 容器id
ubuntu-python3 名字
3.5 :版本号

dockerfile 构建

1. 创建 Dockerfile 文件     D 要大写

vim Dockerfile

  

# This is My first Dockerfile
# Version 1.0
# Author: yu

# Base image    最基础的镜像
FROM centos

# MAINTAINER 维护者  (已弃用)  用LABEL
LABEL maintainer="yu"

# ADD  添加文件  COPY也可以文件  但是ADD可以解压缩文件
ADD plist.txt(文件名称,这个路径,同级目录) /usr/local/src(添加到的路径)
ADD pore-8.37.tar.gz /usr/local/src
ADD nginx-1.9.3.tar.gz /usr/local/src

# RUN 要干什么   运行shell命令  安装软件和包
RUN yum install -y wget gcc gcc-c++ make openssl-devel
RUN useradd -s /sbin/nologin -M www   # 添加用户

# WORKDIR 相当于cd   进入目录 尽量使用绝对目录
WORKDIR /usr/local/src/plist.txt
RUN pip install -r plist.txt
RUN ./configure --prefix=/uer/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/uer/local/src/pcre-8.37 && make && make install
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

# ENV 配置环境变量
ENV PATH  /ust/local/nginx/sbin:$PATH

# EXPOST 映射端口  还可以设置端口监听是tcp或者udp  默认是tcp   tcp可以不写
EXPOST 80/tcp

# CMD 执行命令   1.设置容器启动后默认执行的命令参数  2.如果docker run指定了其他命令,cmd命令会被忽略  3.如果定义了多个cmd,只会执行最后一个
CMD [''nginx'']

# ENTRYPOINT 设置容器启动时运行的命令 1.让容器以应用程序或者服务的形式运行 2.不会被忽略,一定会执行 3.最佳实践:写一个shell脚本为entrypoint

2. 运行 Dockerfile 文件

docker build -t(取个名称) my_nginx:V2  .(Dockerfile文件路径,也可以写绝对路径)

  

 

3-5 构建自己的docker 镜像

3-5 构建自己的docker 镜像

docker container commit , 简写 成 docker commit
说明:create a new from a container`s changes
docker image build 简写 docker build
说明 build an image from a dockerfile

docker image ls
docker run -it centos 交互的运行centos 容器
进入容器后做一些操作,这个容器没有vim ,安装vim
exit 退出容器
docker container ls -a 查看有个退出的容器

3-5 构建自己的docker 镜像

docker commit xenodochial_ritchie xiaopeng163/centos-vim

8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry

8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry

  

         这一篇我们来聊聊私有仓库的搭建,其实不管你是通过docker build还是compose的方式进行构建的镜像,最终还是要将生成好的镜像push到远程的仓库中,这样

多个平台可以方便的获取你registry中的镜像,否则你不还得带着你的源代码到处跑不是? 而且私有仓库还利于镜像的获取分发,反正都是内网,镜像构建的再大又能怎样?

 

一:registry server镜像仓库

       

             你可以到dockerhub上去找一个叫registry server的镜像,如下图:  https://hub.docker.com/_/registry

 

这里我有两台机器: 

registry: 192.168.23.147

client: 192.168.23.146

 

接下来根据registry的文档描述,我在147机器上执行以下docker run 命令,开放5000端口。

[root@localhost ~]# docker run -d -p 5000:5000 --restart always --name registry registry:2
Unable to find image ''registry:2'' locally
2: Pulling from library/registry
c87736221ed0: Already exists 
1cc8e0bb44df: Already exists 
54d33bcb37f5: Already exists 
e8afc091c171: Already exists 
b4541f6d3db6: Already exists 
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:2
80199d4030ed0c444bd27f255201b01e2f5e89abfb4e5d2cd9c61cbbd428baaf
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
80199d4030ed        registry:2          "/entrypoint.sh /etc…"   15 seconds ago      Up 13 seconds       0.0.0.0:5000->5000/tcp   registry

 

      从上图可以看到 host机的5000端口已经开放,接下来我通过146机器从dockerhub上拉取一个Nginx镜像,然后打包成147前缀的仓库地址,然后做push。

[root@localhost ~]# docker pull Nginx
Using default tag: latest
latest: Pulling from library/Nginx
fc7181108d40: Pull complete 
d2e987ca2267: Pull complete 
0b760b431b11: Pull complete 
Digest: sha256:96fb261b66270b900ea5a2c17a26abbfabe95506e73c3a3c65869a6dbe83223a
Status: Downloaded newer image for Nginx:latest
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
Nginx               latest              f68d6e55e065         days ago          109MB
[root@localhost ~]# docker tag Nginx 192.168.23.147:5000/pNginx 
[root@localhost ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
192.168.23.147:5000/pNginx   latest              f68d6e55e065         days ago          109MB
Nginx                        latest              f68d6e55e065        docker push 192.168.23.147:5000/pNginx
The push refers to repository [5000/pNginx]
Get https://192.168.23.147:5000/v2/: http: server gave HTTP response to HTTPS client

     

       卧槽,报错了,从错误信息中可以看到,https的client不接受http的response,没办法,你得要让client端接收不安全的http应该就可以了,这个问题在官方文

档有专门的解决办法,所以在daemon.json 加上一个不安全的http地址即可,如下图: https://docs.docker.com/registry/insecure/

 

    

 

  有了这个解决方案,在/etc/docker/daemon.json 中将前面的域名改成 192.168.23.147, 重启docker,从下面output可以看到推送成功。

[root@localhost ~]# vim /etc/docker/daemon.json
[root@localhost ~service docker restart
Redirecting to /bin/systemctl restart docker.service
[root@localhost ~]# pNginx]
d2f0b6dea592: Layer already exists 
197c666de9dd: Layer already exists 
cf5b3c6798f7: Layer already exists 
latest: digest: sha256:00be67d6ba53d5318cd91c57771530f5251cfbe028b7be2c4b70526f988cfc9f size: 948
[root@localhost ~]# 

 

二:docker-registry-ui 可视化UI

     

         镜像是推送上去了,但在147上无法查看推送上来的镜像信息,还得求助于开源社区,在dockerhub你可以找到一款docker-registry-ui的registry的可视化UI的

工具,如下图: https://hub.docker.com/r/joxit/docker-registry-ui。

           在官方文档中可以找得到一个非常简单的docker执行命令,这里就在147上执行吧。

[root@localhost ~]# docker run -d -p 80:80 joxit/docker-registry-ui
Unable to joxit/docker-registry-ui:latest locally
latest: Pulling from joxit/docker-registry-ui
e7c96db7181b: Pull complete 
3fb6217217ef: Pull complete 
d5443b40bab6: Pull complete 
Digest: sha256:59401aa3c3e29b721163f49f81a9be3698d269bd983a5c44d422bb6da2d263a2
Status: Downloaded newer image for joxit/docker-registry-ui:latest
31806479eb0fdff245ba5f9476bf84d28413f18ec3a96770ebf4f903034461a9

     

          因为容器开放了80端口,所以你可以直接访问: http://192.168.23.147,然后添加上registry server的地址,如下图。

 

          当添加完之后,你会发现有一个“跨域请求”的错误,这是因为默认的registry server不允许这么做,所以你得让registry服务器执行可跨域,其实在官方文档中

也提到了这个问题,可以在registry的config配置文件中进行修改。

 

     接下来我根据文档定义了一个config.yml文件。

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
    Access-Control-Allow-Origin: [''*'']
    Access-Control-Allow-Methods: [''*'']
    Access-Control-Max-Age: [1728000]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

 

       再把原来的register容器kill掉,将上面的config.yml通过文件挂载的方式送到容器里。

[root@localhost app]# docker rm -f registry
registry
[root@localhost app]# docker run -d -p 5000:5000 --name registry -v /app/config.yml:/etc/docker/registry/config.yml registry:2
c8aa9493ec2fea662c161861f6a952be3c30465deef9219e58f263db37719113
[root@localhost app]# ls 
config.yml

 

      最后我在146上重新推送一下,当然你也可以将147上的registry的目录挂载到volume上或者host filesystem。

[root@localhost ~]# pNginx]
d2f0b6dea592: Pushed 
197c666de9dd: Pushed 
cf5b3c6798f7: Pushed 
latest: digest: sha256:00be67d6ba53d5318cd91c57771530f5251cfbe028b7be2c4b70526f988cfc9f size: 948

 

终于可以在ui上看到client推送过来的镜像了,是不是很开心,由于是内网,就算你的image有个1,2g的又何妨呢,本篇就先说到这里,希望对你有帮助。

 

总结

以上是小编为你收集整理的8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

docker Dockerfile文件制作自己的镜像的方法

docker Dockerfile文件制作自己的镜像的方法

1.创建空目录

$ cd /home/xm6f/dev 
$ mkdir myapp
$ cd myapp/

2.vim Dockerfile,内容如下:

## 一个基础的 python 运行环境
FROM python
## 设置工作目录
WORKDIR /app
## 将当前系统文件夹内容复制到容器的 app 目录
ADD . /app
## 安装必要的依赖包
RUN pip install -r softwares.txt
## 开放端口,供容器外访问


EXPOSE 80
EXPOSE 3088
EXPOSE 8080
EXPOSE 8066
## 定义环境变量
ENV NAME HELLO
## 运行命令
CMD ["python","app.py"]

3.安装依赖

vim softwares.txt,内容如下:

Flask
Redis

4.vim app.py,内容如下:

from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
 try:
  visits = redis.incr("counter")
 except RedisError:
  visits = "<i>cannot connect to Redis, counter disabled</i>" 
 html = "<h3>Hello {name}!</h3>" \
   "<b>Hostname:</b> {hostname}<br/>" \
   "<b>Visits:</b> {visits}"
 return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
 app.run(host=''0.0.0.0'', port=80)

5.编译

$ docker build -t myfirstapp .

6.查看新生成了一个image

$ docker images
REPOSITORY     TAG     IMAGE ID   CREATED    SIZE
myfirstapp     latest    01ea1129a831  2 hours ago   699MB
 

7.启动image

$ docker run -p 4000:80 myfirstapp 

也可以放在后台运行:

$ docker run -d -p 4000:80 myfirstapp

8.访问服务

# curl http://localhost:4000
<h3>Hello world!</h3><b>Hostname:</b> a6655d0d7e74<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

或者浏览器访问服务:http://192.168.1.160:4000

9.查看当前运行的镜像

$ docker ps
CONTAINER ID MAGE   COMMAND   CREATED  STATUS  PORTS     NAMES
2db45cab2bb4 myfirstapp "python app.py" 2 minutes ago Up 2 minutes 0.0.0.0:4000->80/tcp elastic_wilson

10.停止镜像

$ docker stop 2db45cab2bb4

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • Docker中镜像构建文件Dockerfile与相关命令的详细介绍
  • 详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置
  • Dockerfile制作官方Tomcat镜像及镜像使用详解
  • 利用Dockerfile制作java运行环境的镜像的方法步骤
  • docker官方镜像下载及使用Dockerfile创建镜像的方法
  • Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
  • 详解docker中Dockerfile指令创建镜像
  • 如何通过vs2017的Dockerfile来生成镜像
  • docker使用Dockerfile构建镜像的方法
  • Docker教程之使用dockerfile生成镜像

docker dockerfile构建自己的tomcat镜像

docker dockerfile构建自己的tomcat镜像

文件

  1.apache-tomcat-8.5.24.tar.gz, jdk-8u151-linux-x64.tar.gz

 

Dockerfile文件:

FROM centos
WORKDIR /usr
COPY apache-tomcat-8.5.24.tar.gz /usr
COPY jdk-8u151-linux-x64.tar.gz /usr
RUN mkdir /usr/tomcat && mkdir /usr/jdk
RUN tar -zxvf apache-tomcat-8.5.24.tar.gz -C /usr/tomcat
WORKDIR /usr/tomcat
RUN mv apache-tomcat-8.5.24 tomcat
WORKDIR /usr
RUN tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/jdk
ENV JAVA_HOME /usr/jdk/jdk1.8.0_151
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 8080

//dokcer运行时执行

ENTRYPOINT /usr/tomcat/tomcat/bin/startup.sh && tail -F /usr/tomcat/tomcat/logs/catalina.out

 

 

docker build -t zxf/tomcat .

 

第二种方法:

VOLUME
VOLUME ["/data"]

    

说明:

   ["/data"]可以是一个JsonArray ,也可以是多个值。所以如下几种写法都是正确的

VOLUME ["/var/log/"]
VOLUME /var/log
VOLUME /var/log /var/db

一般的使用场景为需要持久化存储数据时

容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。

所以当数据需要持久化时用这个命令。



docker commit 容器名称 新的镜像名称

 

今天关于搭建自己的 docker 镜像搭建自己的docker镜像仓库的分享就到这里,希望大家有所收获,若想了解更多关于3-5 构建自己的docker 镜像、8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry、docker Dockerfile文件制作自己的镜像的方法、docker dockerfile构建自己的tomcat镜像等相关知识,可以在本站进行查询。

本文标签: