dockerfile 微服务 私有仓库

commit的局限

用于制作简单的镜像

但是碰到需要设置 环境变量 默认启动命令 指定开放哪些端口就会显得笨拙

所以dockerfile是一种更强大的镜像制作方式,编写类似脚本的dockerfile文件,通过该文件制作镜像

镜像编排

Dockerfile语法

CMD中的执行指令 放入前台运行 需要通过rpm -ql 包 | grep bao.service 看里面的启动命令

语法指令语法说明
FROM基础镜像
RUN制作镜像时执行的命令,可以有多个
ADD复制文件到镜像,自动解压
COPY复制文件到镜像,不解压
EXPOSE声明开放的端口
ENV设置容器启动后的环境变量

WORKDIR

ARG

定义容器默认工作目录(等于cd)

构建时传参用,并不会出现在镜像中

CMD

ENTRYPOINT

容器启动时执行的命令,仅可以有一条CMD(必须在前台运行)写成列表的形式用逗号分隔,docker run 指定的命令可以被替换

提供隐含的ENTRYPOINT默认为/bin/sh -c ;docker run 指定的命令不可以被替换

实际上完整的格式是 NETRYPOINT CMD

mkdir apache
cd apache
vim Dockerfile
FROM mycentos:latest
RUN  yum install -y httpd php && yum clean all
ENV  LANG=C
ADD  myweb.tar.gz /var/www/html/
WORKDIR /var/www/html/
EXPOSE 80
CMD  ["/usr/sbin/httpd", "-DFOREGROUND"]


[root@docker-0002 apache]# docker build -t myapache:latest .
Successfully tagged myapache:latest

制作phpfpm镜像

mkdir pfp-fpm
cd php-fpm
vim Dockerfile
FROM mycentos:latest
RUN  yum install -y php-fpm && yum clean all
EXPOSE 9000
CMD ["/usr/sbin/php-fpm", "--nodaemonize"]

[root@docker php-fpm]# docker build -t myfpm:latest .
Successfully tagged myfpm:latest

制作nginx镜像

编译软件包 在真机上 通过 httpd通过

[root@docker-0002 ~]# useradd nginx
[root@docker-0002 ~]# yum install -y gcc make pcre-devel openssl-devel
[root@docker-0002 ~]# tar zxf nginx-1.17.6.tar.gz
[root@docker-0002 ~]# cd nginx-1.17.6/
[root@docker-0002 nginx-1.17.6]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
[root@docker-0002 nginx-1.17.6]# make && make install
[root@docker-0002 nginx-1.17.6]# echo 'Nginx is running !' >/usr/local/nginx/html/index.html
制作镜像
[root@docker-0002 ~]# mkdir nginx
[root@docker-0002 ~]# cd nginx
[root@docker-0002 nginx]# tar czf nginx.tar.gz -C /usr/local nginx
[root@docker-0002 nginx]# vim Dockerfile 
FROM mycentos:latest
RUN  yum install -y pcre openssl && useradd nginx && yum clean all
ADD  nginx.tar.gz /usr/local/
WORKDIR /usr/local/nginx/html
EXPOSE 80
CMD  ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
[root@docker-0002 nginx]# docker build -t mynginx:latest .
Successfully tagged mynginx:latest

启动命令

通过rpm -ql httpd | grep httpd.service类似的形势找CMD中的启动命令

微服务

架构是一个持续演进的结果 原始分布式架构 单体系统架构 SOA架构 微服务架构 云原生

微服务不是一种技术,而是架构思想,以容器技术为载体,实现

        松耦合高内聚 高度可扩展 出色的弹性 易于部署、访问

云原生时代

微服务架构知识云时代的起点,在微服务兴起后,人们对大规模容器集群编排就显得弱弱弱

所以在2014年6月K8s横空出世 如今K8s被公认为云时代的操作系统。软件和硬件的界限越来越模糊,硬件向上抽象,云化,全力向云原生时代过度

对外发布服务

docker run -itd -p 宿主机端口:容器端口 镜像名称:标签

容器共享卷

docker run -itd -v 宿主机对象:容器内对象 镜像名称:标签

目标对象不存在自动创建

目标对象存在直接覆盖掉

多个容器可以映射同一个目标对象来达到数据共享的目的

-v参数可以有多个

容器间通信

docker网络通信模式有

        -host模式,与宿主机共享网络

        -container模式,共享其他容器的网络命名空间

        -none模式,无网络模式

        -bridge模式,默认模式

        -自定义网络,自由创建桥接网络或者overlay网络

docker私有仓库

私有仓库配置docker-distribution

[root@registry ~]# yum install -y docker-distribution
[root@registry ~]# systemctl enable --now docker-distribution
[root@registry ~]# curl http://127.0.0.1:5000/v2/_catalog
{"repositories":[]}

/etc/docker-distribution/registry/config.yml(配置文件路径)

/var/lib/registry(镜像存储路径)

默认端口5000

标签:http://仓库IP:5000/v2/_catalog

        curl http://registry:5000/v2/_catalog

名称:http://仓库IP:5000/v2/镜像名称:tags/list

        curl http://registry:5000/v2/library/myos/tags/list | python -m json.tool

客户端配置

[root@docker-0001 ~]# vim /etc/hosts
192.168.1.30	registry
[root@docker-0001 ~]# vim /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["http://registry:5000","https://hub-mirror.c.163.com"],
    "insecure-registries":["192.168.1.30:5000","registry:5000"]
}
[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
[root@docker-0001 ~]# systemctl restart docker

上传镜像

[root@docker-0001 ~]# docker tag myos:latest registry:5000/library/myos:latest
[root@docker-0001 ~]# docker push registry:5000/library/myos:latest
The push refers to repository [registry:5000/library/myos]
af5f00549b79: Pushed 
latest: digest: sha256:c130aafc1c2104f896ae03393740192d47 size: 527
[root@docker-0001 ~]# # 上传所有 myos 镜像
[root@docker-0001 ~]# docker tag centos:7 registry:5000/myimg/centos:7
[root@docker-0001 ~]# docker push registry:5000/myimg/centos:7
The push refers to repository [registry:5000/myimg/centos]
174f56854903: Pushed 
7: digest: sha256:dead07b4d8ed59d839686a31da35a3b532f size: 529

tag

docker tag 镜像名称:标签 registry:5000/library/镜像名称:标签

push

docker push registry:5000/library/myos:latest

pull下载

docker pull registry:5000/library/myos:v2009

验证测试

查看镜像名称: curl http://仓库IP:5000/v2/_catalog
查看镜像标签: curl http://仓库IP:5000/v2/镜像名称/tags/list

仓库中的 library 是默认路径,允许容器不需要指明地址

curl http://registry:5000/v2/library/myos/tags/list| python -m json.tool

以json的格式展示有哪些镜像

[root@docker-0002 ~]# vim /etc/hosts
192.168.1.30	registry
[root@docker-0002 ~]# vim /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["http://registry:5000","https://hub-mirror.c.163.com"],
    "insecure-registries":["192.168.1.30:5000","registry:5000"]
}
[root@docker-0002 ~]# docker rm -f $(docker ps -aq)
[root@docker-0002 ~]# docker rmi -f $(docker images -aq)
[root@docker-0002 ~]# systemctl restart docker
# 查看镜像名称
[root@docker-0002 ~]# curl http://registry:5000/v2/_catalog
{"repositories":["library/myos","myimg/centos"]}
# 查看镜像标签
[root@docker-0002 ~]# curl http://registry:5000/v2/library/myos/tags/list
{"name":"library/myos","tags":["latest","httpd","phpfpm","nginx","v2009"]}
# 仓库中的 library 是默认路径,允许容器不需要指明地址
[root@docker-0002 ~]# docker run -it myos:v2009
[root@634766f788d6 /]# 
# 如果不是默认路径,运行容器需要指明镜像地址
[root@docker-0002 ~]# docker run -it registry:5000/myimg/centos:7
[root@2b7cd6d88a76 /]# 
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker私有仓库是一种用于存储和管理Docker镜像的容器注册表。它允许您在内部网络中创建和共享私有镜像,以便只有授权的用户可以访问和使用它们。私有仓库提供了更好的安全性和控制,适用于企业或组织内部使用。 要设置一个私有仓库,您可以使用Docker官方提供的开源项目Docker Registry,它是一个基于HTTP API的容器注册表。您还可以选择使用其他第三方工具或云服务提供商提供的私有仓库解决方案。 以下是一些设置私有仓库的步骤: 1. 安装和配置Docker Registry:按照Docker Registry项目的文档,您可以在自己的服务器上安装和配置Docker Registry。它可以作为一个单独的容器运行,或者与其他Docker容器一起在同一主机上运行。 2. 生成SSL证书(可选):如果您需要加密传输数据并提供更高的安全性,您可以生成SSL证书并将其与Docker Registry一起使用。这通常涉及到使用自签名证书、购买第三方证书或使用免费的证书颁发机构(如Let's Encrypt)来获得SSL证书。 3. 配置访问权限:您可以根据需要配置私有仓库的访问权限。这包括添加用户认证、设置访问控制列表(ACL)或使用其他身份验证和授权机制。 4. 上传和下载镜像:一旦私有仓库设置好了,您可以使用Docker客户端将本地构建的镜像上传到仓库中,并从仓库中下载和部署镜像。 请注意,这只是一个简要的概述,真实环境中的设置可能会更加复杂和定制化。您可以根据自己的需求和情况进行进一步的研究和实施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small white poplar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值