镜像与仓库

自定义镜像与仓库

自定义镜像

使用镜像启动容器,在该容器基础上修改,然后另存为一个新镜像
例:docker run -it docker.io/centos
docker start 2a53112
docker commit 2a53112 docker.io/myos:latest
docker images
docker history
docker history f281
Dockerfile语法格式: #必须是此文件名,一个目录对应一个文件
-FROM :基础镜像(基于那个镜像做的)
-MAINTAINER:镜像创建者信息(输出镜像创建者的自定义信息)
-EXPOSE:开放的端口(将服务的端口开放)
-ENV:设置环境变量(环境变量减少执行命令的复杂程度)
-ADD:固执文件到镜像(将本机的文件复制到容器里面)
-RUN:制作镜像是执行的命令,可以有多个(在容器里面执行命令),run执行命令一直在家目录下,即使run cd /tmp下,下一个run还是在家目录下
-WORKDIR:定义容器默认工作目录(解决run执行命令一直在/root下,解决cd命令无效的问题)
-CMD:容器启动时执行的命令(即修改默认的启动命令),仅可以有一条CMD (格式:CMD [“ls”,"-l","-a"],是一种python格式,将命令和参数用双引号引起来,并用逗号隔开,写在中括号中)(定义的CMD命令为上帝进程)
使用Dockerfile工作流程:mkdir aa --> cd aa–> vim Dockerfile --> docker build -t 新镜像名:标签 DOckerfile所在目录
例:mkdir docker ; touch a.repo -->vim --> :r /etc/yum.repos.d/local.repo -->gpgcheck=0
touch Dockerfile --> vim -->
FROM docker.io/centos:latest
RUN rm -f /etc/yum.repos.d/*
ADD a.repo /etc/yum.repos.d/local.repo
RUN yum -y install vim net-tools iproute psmisc bash-completion
docker build -t myos:test docker/ #利用Dockerfile文件生成新镜像
例:创建一个httpd的镜像,启动容器时,自动启动httpd服务,设置默认工作目录为/var/www/html,设置默认首页为hello world
mkdir aa–> cd aa --> touch Dockerfile–> vim Dockerfile–>
FROM myos:latest
RUN yum -y install httpd
WORKDIR /var/www/html
ADD index.html index.html
ENV EnvironmentFile=/etc/sysconfig/httpd
EXPOSE 80
CMD ["/usr/sbin/httpd","-DFOREGROUND"]
docker build -t myos:httpd .
docker run -itd myos:httpd
docker inspect ID号 #查看详细信息,找到容器ip地址
curl http://172.17.0.4

自定义镜像仓库

registry基本概念:共享镜像的一台服务器(镜像化的一台服务器)
tab键的利用(装bash-completion)
基本概念图例
自定义私有仓库(服务端,需要有和客户端相同的yum源):yum -y install docker-distribution
启动私有仓库,并设置开机自启动: -systemctl start/enable docker-distribution
仓库配置文件及数据存储路径: -/etc/docker-distribution/registry/config.yml
-/var/lib/registry
客户端配置(docker1和Docker2): 修改配置文件 /etc/sysconfig/docker
13行 ADD_REGISTRY=’–add-registry 192.168.1.30:5000’ #仓库地址
24行 INSECURE_REGISTRY=’–insecure-registry 192.168.1.30:5000’ #允许非加密方式访问仓库
保存并重启服务(先将容器都停止):

[root@docker1 ~]# docker stop $(docker ps -aq)
7904fba025d8
a898b961823f
a392cef14816
2a531124fc92
d0cd52802627
[root@docker1 ~]# systemctl restart docker

客户端准备上传镜像: 为镜像创建标签,docker tag 镜像:标签 IP:5000/改名修改镜像名:latest
docker tag myos:httpd 192.168.1.30:5000/httpd:latest
上传镜像:上传镜像的标签内包含地址和端口号
docker push IP:5000/镜像:latest , -docker push 192.168.1.30:5000/httpd:latest
客户端下载镜像(docker2):重启Docker服务systemctl restart docker
远程启动镜像:docker run -it [可加IP地址:5000]/仓库镜像:latest
查看私有镜像仓库中的镜像名称: -curl http://IP地址:5000/v2/_catalog
查看某一仓库的标签: -curl http://地址:5000/v2/<镜像名>/tags/list
私有仓库数据存储目录:/var/lib/Registry

持久化存储

存储卷

卷的概念:docker容器不保持任何数据,重要数据请使用外部卷存储(数据持久化),容器可以挂载真实机目录或共享存储为卷

主机卷的映射:将真实机目录挂载到容器中提供持久化存储(目录不存在会自动创建,目录存在就直接覆盖掉)
docker run -v /data:/data -it docker.io/centos bash

共享存储

例:服务端创建NFS共享存储目录,权限为rw(在docker0上布置)
yum -y install nfs-utils
mkdir /centos
vim /etc/exports --> /centos 192.168.1.0/24(rw)
systemctl restart nfs-server.service
systemctl restart nfs-secure.service
exportfs -rv
chmod 777 /centos 和 chmod 777 /centos/index.html #使docker1/2用于修改index内容
echo hello world > /centos/index.html
客户端挂载共享,并将共享目录映射到容器中:
docker1:yum -y install nfs-utils
showmount -e 192.168.1.30
mkdir /mnt/docker1
mount -t nfs 192.168.1.30:/centos /mnt/docker1/
ls /mnt/docker1/
docker images
docker ps
docker run -v /mnt/docker1:/usr/share/nginx/html -itd docker.io/nginx
docker2: docker run -v /mnt/docker1:/var/www/html -itd docker.io/nginx

Docker网络架构

查看默认Docker创建的网络模型

docker network list 或者 docker network ls

查看某一特定网桥: ip a s docker0
启动容器会绑定该网桥: brctl show docker0 #命令查看网桥的详细信息

使用Docker创建网桥

[root@docker2 ~]# docker network create --subnet=10.10.10.0/24 docker1
[root@docker2 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
5ae877ac834e        bridge              bridge              local               
4657d13f3aec        docker1             bridge              local               
72f758e2594f        host                host                local               
fbbb38754ee0        none                null                local

查看创建的网桥底层信息:docker network inspect docker1
使用自定义网桥:docker run -it --network=docker1 docker.io/centos

客户端访问容器内的资源

默认容器可以访问外网,但外部网络的主机不可以访问容器内的资源,容器的特征是可以把宿主机变成对应的服务
-使用-p参数把容器端口和宿主机端口绑定
-用法: -p 宿主机端口:容器端口
例:把docker1变成httpd服务:

[root@docker1 ~]# docker run -itd -p 80:80 myos:httpd 
b05e17090695e399a472952a627404323e8af191a1bd09d2e165cbfd999607f2
[root@docker1 ~]# curl 192.168.1.31
hello world
[root@docker1 ~]# docker run -itd -p 80:80 docker.io/nginx:latest 
92df179bbc1d8c56dec20960af00ac3210b25cace15a421d4fcf4fc01887a03d
[root@docker1 ~]# curl 192.168.1.31
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值