在本文中,我们将为您详细介绍搭建自己的docker镜像的相关知识,并且为您解答关于搭建自己的docker镜像仓库的疑问,此外,我们还会提供一些关于3-5构建自己的docker镜像、8天入门docker
在本文中,我们将为您详细介绍搭建自己的 docker 镜像的相关知识,并且为您解答关于搭建自己的docker镜像仓库的疑问,此外,我们还会提供一些关于3-5 构建自己的docker 镜像、8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry、docker Dockerfile文件制作自己的镜像的方法、docker dockerfile构建自己的tomcat镜像的有用信息。
本文目录一览:- 搭建自己的 docker 镜像(搭建自己的docker镜像仓库)
- 3-5 构建自己的docker 镜像
- 8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry
- docker Dockerfile文件制作自己的镜像的方法
- docker dockerfile构建自己的tomcat镜像
搭建自己的 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 镜像
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 查看有个退出的容器
docker commit xenodochial_ritchie xiaopeng163/centos-vim
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文件制作自己的镜像的方法
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镜像
文件
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镜像等相关知识,可以在本站进行查询。
本文标签: