고정 표시기 학습 및 응용 프로그램

의 A, 고정 표시기의 역사

왜 선박입니까?

OpenStack은 후, 현재 고정 표시기 컨테이너보다 인터넷의 가장 인기있는 기술은 빠르면 2015 년으로, Jingdong 2 년이 증가하고 고정 표시기 + 10 11 번 부두 노동자, 준비하기 위해 기술을 사용하는 것입니다. 고정 표시기 고정 표시기를 학습하기 전에, 내가 먼저 컨테이너가 무엇을 이해할 필요가있다, 단지 컨테이너입니다? 우리가 잘 고정 표시기를 이해하는 데 도움이됩니다.

컨테이너는 무엇입니까 :

컨테이너는 고립 된 환경이 자체 파일 시스템 디렉토리가 내부의 격리 된 환경에서 실행중인 프로세스이며, 자신의 IP 주소, 호스트 이름이, 등등.

사람들이있다 : 컨테이너가 경량 가상화 기술입니다.

사용 용기의 장점은 무엇입니까?

컨테이너 상대적인 장점은 가상 머신을 KVM :

1 : 용기 가까이 호스트 부분의 성능하게 손상 호스트 및 가상 머신 KVM 성능을 제공 할 수있다.

2 : 동일한 하드웨어 구성, 시작 10 개 가상 머신을 호스팅 할 수 있습니다 그것은 100 + 선박을 시작할 수 있습니다.

3 : KVM은 가상 머신을 시작이 용기는 단지 1 초 필요 시작 20 초일 수있다.

4 : KVM 하드웨어의 CPU가 필요 지원은 용기가 필요하지 않습니다.

리눅스 부팅 과정 :

BIOS 부팅 하드웨어 자체 테스트

에 따르면 바이오스는 우선 순위 시작 항목을 설정

MBR 가이드 읽기

커널을로드

첫 번째 과정은 경우 / sbin / 초기화 시작

시스템 초기화 스크립트 /etc/rc.d/rc.sysinit 시스템 초기화 시스템을 수행

실행 원하는 서비스

SSHD 요약 : SSHD 서비스를 실행하는 KVM 가상 머신 컨테이너는 모든 합리화 과정의 중간에, 직접 서비스를 시작 SSHD이다, 완전한 부팅 과정이 필요합니다.

컨테이너의 역사 :

1)는 chroot 기술의 chroot, 변경, 루트 디렉토리 (루트 디렉토리를 변경), 리눅스 시스템에서, 시스템 기본 디렉토리 구조의 기반이되는 / 루트 (루트) 시작되었는지, 그리고 chroot를 사용 후, 시스템 디렉토리 구조는 위치 / 자세로 지정 될

2) LXC 컨테이너의 전체 이름 : 리눅스 컨테이너, 유사한 가상 머신에 동일한 경험을 제공하기 위해 구현 자원 제약 cgroup에 의한 네임 스페이스 네임 스페이스 구현 격리 된 환경에 의해.

3) 초기 고정 표시기 고정 표시기 컨테이너 LXC 용기의 바닥을 호출하는 것, 후자는 자기 libcontainer로 대체

둘째, 설치 및 컨테이너 LXC 사용

세, 고정 표시기 및 설치

(A) 정의 도커

고정 표시기 (네임 스페이스와 cgroup을)이 컨테이너 자원의 분리 및 자원 제약 조건을 제공하는 커널 가상화 기술입니다.

(오퍼레이팅 시스템 커널에 의해 요구되는) 분리 층을 달성 가상화 운영체제 도커 때문에, 운전 중에 도커 용기 있도록 가상 머신 KVM보다 유사한 가상 머신 (VM) 운영체제, 추가적인 오버 헤드 및 라이터를 필요로하지 않는다 .

고정 표시기는 소프트웨어 패키징 기술이다.

철학 (2 개) 고정 표시기의의

부두 노동자의 주요 목표는 어디에서나 실행, 교통 건설, "빌드, 선박 및 실행되는 응용 프로그램, Angwhere"이다.

건물 : 모든 문서 생산 시스템 디렉토리 고정 표시기 거울, 용기 포장.

교통 : 다운로드 고정 표시기 이미지.

실행 미러링은 rootfs가 고정 표시기 기초를 제공, 컨테이너를 시작합니다.

요약 : 장기 고정 표시기 컨테이너로서, 다음 거울 고정 표시기 이미 설치된 소프트웨어도 실행할 수 있으므로 고정 표시기가 소프트웨어 패키징 기술이다.

부두 노동자의의 장점 (3 개)

1 : 종속의 nginx 운영 체제 및 소프트웨어 운영 환경 opensslgit하려면 openssl 해결

2 : 개발자를 위해 더 이상 개발 환경을 배포하지에 대해 걱정할 필요가 없습니다

3 : 개발, 테스트 및 생산 환경에서 매우 일관된.

4 : 사용자가 제품의 새로운 기능을 경험할 수있는 아이디어를 보자.

(D) 고정 표시기 설치

yum源配置:
rm -fr  /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo

安装docker-ce:
yum install docker-ce -y

(E) 고정 표시기 아키텍처

启动docker
systemctl start docker
systemctl enable docker

docker version
docker是一个cs架构:
通过docker version来查看
docker info
docker最重要的三大组件:
镜像,容器,仓库

넷째, 고정 표시기 컨테이너의 시작

(A)는 제 1 용기를 고정 표시기 시작

고정 표시기 용기는 우리가 기존의 컴파일을 경험하고 nginx를 설치, 소프트웨어 패키징 기술이다 : 공식

네트워크 다운로드 Nginx의 소스 패키지 wget을

타르 소스 패키지를 추출

Nginx에 사용자를 만들기 종속성을 설치합니다

컴파일 및 설치 부작의 구성, 메이크업, 메이크업 설치

구성 파일을 수정 Nginx에

시작 nginxdocker 용기

고정 표시기 실행은 80:80의 nginx를 -p -d

[root@docker-01 ~]# docker run -d -p 80:80  nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
8ec398bc0356: Pull complete 
dfb2a46f8c2c: Pull complete 
b65031b6a2a5: Pull complete 
Digest: sha256:8aa7f6a9585d908a63e5e418dc5d14ae7467d2e36e1ab4f0d8f9d059a3d071ce
Status: Downloaded newer image for nginx:latest
2dcafeb781c891246564d3e23a8495b4fe8f32606240ff2acf062ae1dcd8351a
[root@docker-01 ~]# 

(B) 고정 표시기 명령 인터프리터

고정 표시기 실행은 80:80의 nginx를 -p -d

실행 (작성 및 컨테이너를 실행) -

백그라운드 D에

-p 포트 매핑

nginx를 고정 표시기의 이미지 이름

(C) 용기를 배치 고정 표시기 가속화

고정 표시기를 구성 거울 가속화

[루트 @ 고정 표시기-01 ~] # 정력 /etc/docker/daemon.json

{

"레지스트리 거울"[

"https://dockerhub.azk8s.cn",

"https://reg-mirror.qiniu.com",

"https://registry.docker-cn.com"

]

}

systemctl 재시작 고정 표시기

다섯, 고정 표시기는 일반적으로 사용되는 미러링 명령

(A) 검색 거울 :

고정 표시기 검색 제안은 선거를 미러링 :

1, 공식에 우선 순위를 부여

2, 시작하고 더의 수

(ⅱ) 획득 된 이미지

获取镜像:
    docker pull(push)
镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
    
    docker pull centos:6.8(没有指定版本,默认会下载最新版)
    docker pull daocloud.io/huangzhichong/alpine-cn:latest 

扩展:查询docker镜像所有版本https://hub.docker.com/r/library/

(ⅲ) 다른 이미지 조작 도커

查看镜像
    docker images
docker images ls

删除镜像
    docker rmi  例子:docker image rm centos:latest
导出镜像
    docker save  例子:docker image save centos > docker-centos7.4.tar.gz
导入镜像
    docker load  例子:docker image load -i docker-centos7.4.tar.gz

여섯, 고정 표시기 컨테이너 일상적인 관리

(A) 용기를 실행

docker run -d -p 80:80 nginx:latest
run             (创建并运行一个容器)
-d                  放在后台
-p                  端口映射
nginx:latest   docker镜像的名字和版本
还有很多其他的参数

docker run == docker create  + docker start

(두), 기타 일반적으로 사용되는 명령을 고정 표시기

停止容器
    docker stop CONTAINER_ID
杀死容器
    docker kill container_name
查看容器列表
     docker ps
    docker ps –a 
删除容器
    docker rm
批量删除容器
    docker rm -f `docker ps -a -q`

(세), 고정 표시기의 실행 확장

docker run -it --name centos6 centos:6.8 /bin/bash
-it             分配交互式的终端
--name     指定容器的名字
/bin/sh      覆盖容器的初始命令

--cpus       指定cpu的数量
--memory  限定内存的大小
-h              指定容器的主机名

용기에있어서 (D)

进入容器的目的:排错,调试

进入容器的方法:
    docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
    例子: 
    docker exec -it  容器id或容器名字 /bin/bash

    docker attach [OPTIONS] CONTAINER
    例子:
    docker attach  容器id或容器名字
    
    nsenter(安装yum install -y util-linux 弃用)

(E)의 핵심 개념 고정 표시기 용기

docker的本质是:在隔离的环境运行的一个进程

所以:docker容器内的第一个进程必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!


[root@docker-01 ~]# docker run -d -p 80:80 nginx
[root@docker-01 ~]# docker ps -a
[root@docker-01 ~]# docker container stop 35526c06959a
[root@docker-01 ~]# docker ps -a
[root@docker-01 ~]# docker run -d -p 80:80 nginx:latest
[root@docker-01 ~]# docker container kill beautiful_greider

[root@docker-01 ~]# docker run -d -p 80:80 nginx:latest
[root@docker-01 ~]# docker container stop 1a75cb5461d9
[root@docker-01 ~]# docker container rm  1a75cb5461d9
[root@docker-01 ~]# docker container rm `docker ps -a -q`
[root@docker-01 ~]# #所有退出状态的容器删除
[root@docker-01 ~]# docker container create nginx:latest
[root@docker-01 ~]# docker start 441a6527829e
[root@docker-01 ~]# docker run -it centos:6.8 /bin/bash
[root@docker-01 ~]# docker run -it centos:6.8
[root@ef4337be4ae9 /]# #两边界面相同
[root@docker-01 ~]# docker run -it centos:6.8
[root@docker-01 ~]# docker run -d centos:6.8
[root@docker-01 ~]# docker run -it centos:6.8
[root@docker-01 ~]# docker ps -a -l --no-trunc
[root@docker-01 ~]# docker run -d nginx:latest
[root@docker-01 ~]# docker run -d nginx:latest nginx -g 'daemon off'
[root@docker-01 ~]# docker run -it nginx:latest /bin/bash
[root@docker-01 ~]# docker pull alpine
[root@docker-01 ~]# docker image
[root@docker-01 ~]# docker run -it alpine:latest /bin/bash
[root@docker-01 ~]# docker run -it alpine:latest /bin/sh
[root@docker-01 ~]# docker run -d centos:6.8 tail -f /var/log/yum.log
===============
[root@docker-01 ~]# docker container attach ef4337be4ae9
[root@ef4337be4ae9 /]# #两边界面相同

[root@docker-01 ~]# docker exec -it 441a6527829e

세븐, 고정 표시기 용기 네트워크 액세스

왜 실행 컨테이너 포트 매핑에 사용 하시겠습니까?

기본적 경우는 172.17.0.0/16 네트워크 세그먼트를 사용하여 IP 컨테이너에 의해, 외부 사용자는 호스트 10.0.0.0/24 네트워크 세그먼트에 액세스 할 수 있습니다, 당신은 172.17.0.0/16 네트워크 세그먼트에 액세스 할 수 없습니다.

우리의 작업 용기의 목적은 : 포트 매핑을 할 필요하므로, 외부 세계는, 용기에 변환하기 위해 여기에 액세스 할 수있는 외부 네트워크 172.17.0.0/16 네트워크 세그먼트 10.0.0.0/24 관련 될 수 컨테이너에서 서비스를 실행하는 것입니다 .

방법 (a)는 컨테이너 포트 매핑 작업 도커

指定映射(docker 自动添加一条iptables规则实现端口映射)
    -p hostPort:containerPort
    -p ip:hostPort:containerPort 
    -p ip::containerPort(随机端口)
    -p hostPort:containerPort:udp
    -p 81:80 -p 443:443 可以指定多个-p

随机映射
    docker run -P (随机端口)

예 :

80端口映射到80端口:
[root@docker-01 ~]# docker run -d -p 80:80 nginx:latest
查看防火墙策略:
[root@docker-01 ~]# iptables -t nat -L -n

[root@docker-01 ~]# docker container inspect keen_austin 
[root@docker-01 ~]# curl -I 172.17.0.2

8080映射到80:
[root@docker-01 ~]# docker run -d -p 8080:80 nginx:latest
配置第二个地址:
[root@docker-01 ~]# ifconfig eth0:1 10.0.0.111/24 up

82端口映射到80:
[root@docker-01 ~]# docker run -d -p 10.0.0.11:82:80 nginx:latest
10.0.0.111地址的82端口映射到80:
[root@docker-01 ~]# docker run -d -p 10.0.0.111:82:80 nginx:latest

映射任意端口:
[root@docker-01 ~]# docker run -d -p 10.0.0.111::80 nginx:latest
[root@docker-01 ~]# netstat -lntp

查看内核参数配置:
[root@docker-01 ~]# sysctl -a | grep ipv4 | grep range

产生任意端口:
[root@docker-01 ~]# docker run -d -P nginx:latest 

[root@docker-01 ~]# docker ps 
[root@docker-01 ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
"/etc/sysctl.conf" 11L, 473C written                     
[root@docker-01 ~]# 
[root@docker-01 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@docker-01 ~]# #设置在内核参数中

여덟 고정 표시기 데이터 저장 용량

왜 고정 표시기 데이터 볼륨 :

데이터 볼륨 효과 :

1 : 영구적 데이터 파일은 선박의 작동 동안에 생성 된

2 : 복수의 용기 사이의 파일 공유.

정상적인 상황에서, 컨테이너, 모든 파일이 삭제됩니다 컨테이너를 제거합니다.

(A) 일반 고정 표시기 데이터 볼륨 명령어

데이터 볼륨 고정 표시기 볼륨을 생성하면 생성

볼륨 LS 고정 표시기 데이터 볼륨의 목록보기

데이터 볼륨 고정 표시기 볼륨 RM을 삭제하려면

검사 속성 고정 표시기 볼륨의 데이터 볼륨보기

데이터 볼륨 고정 표시기의 (ⅱ) 적용

docker volume create oldboy

docker run -d -p 80:80 -v oldboy:/usr/share/nginx/html nginx:latest

cd /var/lib/docker/volumes/oldboy/_data/
rm -f *
wget https://www.qstack.com.cn/xiaoniaofeifei.zip
unzip xiaoniaofeifei.zip

docker run -d -p 81:80 -v oldboy:/usr/share/nginx/html nginx:latest
docker run -d -p 82:80 -v oldboy:/usr/share/nginx/html nginx:latest 

(C) 용기를 탑재 할 수있는 호스트의 디렉토리

cd /opt
mkdir xiaoniao
cd xiaoniao/
wget https://www.qstack.com.cn/xiaoniaofeifei.zip
unzip xiaoniaofeifei.zip 

#重点
docker run -d -p 83:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest

연습 :

[root@docker-01 ~]# docker volume ls
DRIVER              VOLUME NAME
[root@docker-01 ~]# docker volume create oldboy
oldboy
[root@docker-01 ~]# docker run -d -p 80:80 -v oldboy:/usr/share/nginx/html nginx:latest
4c0b7d7c5035d88bff6c6aea00654b1f66989c6f9414f7373cf4c3ff9f5d24e0
[root@docker-01 ~]# docker ps -a -l
[root@docker-01 ~]# docker volume ls
DRIVER              VOLUME NAME
local               oldboy
[root@docker-01 ~]# docker volume inspect oldboy
[
    {
        "CreatedAt": "2020-01-13T22:58:30+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/oldboy/_data",
        "Name": "oldboy",
        "Options": {},
        "Scope": "local"
    }
]
[root@docker-01 ~]# cd /var/lib/docker/volumes/oldboy/_data/
[root@docker-01 _data]# ls
50x.html  index.html
[root@docker-01 _data]# rm *
[root@docker-01 _data]# wget https://www.qstack.com.cn/xiaoniaofeifei.zip
[root@docker-01 _data]# unzip xiaoniaofeifei.zip
[root@docker-01 /]# docker run -d -p 81:80 -v oldboy:/usr/share/nginx/html nginx:latest
dddf5dbcdf6eddc181c2719f174825dcf9ab184cc3464f46a599a96c4c4807d4
[root@docker-01 /]# docker run -d -p 82:80 --volumes-from charming_jackson nginx:latest
90e64512a67e58c369866d38d3d8cf70fafe270f4ec35f914679da7db19894a5
[root@docker-01 /]# docker ps -a -q
[root@docker-01 /]# docker rm -f `docker ps -a -q`

나인, 수동 생산 고정 표시기 이미지

(A) 미러 고정 표시기의 제조 공정

거울 고정 표시기 생산 단계 :

1 : 소프트웨어 서비스를 설치 한 컨테이너를 시작합니다

2 : 서비스 컨테이너 미러를 제출 커밋 설치

3 : 제출 된 새 미러를 테스트 할 수있는 새 컨테이너를 시작

(II)의 제작 지원 SSH 원격 로그인 고정 표시기 미러

制作docker镜像步骤:
1:启动容器安装软件服务
docker run -it -p 1022:22 --name oldboy centos:6.9 
######
yum install openssh-server
/etc/init.d/sshd start
passwd 
######

2:将安装好服务的容器commit提交为镜像
docker commit oldboy centos6-ssh:v1

3:   启动新容器来测试新提交的镜像
docker run -d -p 2022:22 centos6-ssh:v1  /usr/sbin/sshd -D

(C) 생산 지원 서비스는 ssh + 아파치 이중 거울

1:启动容器安装软件服务
docker run -it --name oldgirl centos:6.9 
yum install httpd
yum install openssh-server
/etc/init.d/sshd start
passwd 

###容器启动脚本
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D

2:将安装好服务的容器commit提交为镜像
docker commit oldgirl centos6-ssh-httpd:v1

3:启动新容器来测试新提交的镜像
docker run -d -p 8080:80 -p 1122:22 centos6-ssh-httpd:v1 /bin/bash /init.sh

(D) 실시 예

[root@docker-01 /]# docker pull centos:6.9
[root@docker-01 /]# yum install openssh-server -y
[root@docker-01 /]# docker run -it -p 1022:22 --name oldboy centos:6.9
[root@3af911405c61 /]# yum install openssd-server -y
[root@3af911405c61 /]# /etc/init.d/sshd start
[root@3af911405c61 /]# netstat -lntp
[root@3af911405c61 /]# echo 123456 | passwd --stdin root
[root@docker-01 ~]# ssh [email protected] -p 1022
[root@docker-01 /]# docker commit oldboy centos6_ssh:v1
[root@docker-01 ~]# docker run -d -p 2022:22 centos6_ssh:v1 /usr/sbin/sshd -D
381f2b966a516286185e23e5f9514fe0a88c7c8791b3d5f37cbe168e51d349a9
[root@docker-01 /]# docker ps -a -l
[root@docker-01 /]# ssh [email protected] -p 2022
[root@docker-01 /]# docker run -it -p 1122:22 -p 8080:80 --name oldgirl centos:6.9
[root@00dbe3e92f11 /]# yum install openssh-server -y
[root@00dbe3e92f11 /]# /etc/init.d/sshd start
[root@00dbe3e92f11 /]# yum install httpd -y
[root@00dbe3e92f11 /]# vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@docker-01 ~]# docker commit oldgirl centos6_ssh_http:v1
[root@docker-01 ~]# docker run -d -p 1222:22 -p 8090:80 centos6_ssh_http:v1 /bin/bash /init.sh
[root@docker-01 ~]# curl -I 10.0.0.11:8090
[root@docker-01 ~]# ssh [email protected] -p 1222

10 가지, dockerfile 자동으로 미러를 구성

, 미러 dockerfile를 사용해 구축 된 수동 생산 고정 표시기 미러에 비해 다음과 같은 장점이있다 :

1 : 몇 킬로바이트 dockerfile, 쉬운 교통

2 : 미러링 빌드 아웃 dockerfile, 런타임 컨테이너에, 컨테이너는 초기 명령을 지정하지

3 : 더 사용자 지정 작업에 대한 지원

(A) 자주 사용 지침을 dockerfile

dockerfile常用指令:
    FROM 这个镜像的妈妈是谁?(指定基础镜像)
    MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)
    RUN 你想让它干啥(在命令前面加上RUN即可)
    ADD 给它点创业资金(COPY文件,会自动解压)
    WORKDIR 我是cd,今天刚化了妆(设置当前工作目录)
    VOLUME 给它一个存放行李的地方(设置卷,挂载主机目录)
    EXPOSE 它要打开的门是啥(指定对外的端口)(-P 随机端口)
    CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)(容易被替换)
    
dockerfile其他指令: 
    COPY 复制文件
    ENV  环境变量
    ENTRYPOINT  容器启动后执行的命令(无法被替换,启容器的时候指定的命令,会被当成参数)

(ⅱ) dockerfile 전투 (제)

手动制作docker镜像步骤:
1:启动容器安装软件服务
docker run -it -p 1022:22 --name oldboy centos:6.9 
######
yum install openssh-server -y
/etc/init.d/sshd start
echo 123456|passwd  --stdin root 
######

2:将安装好服务的容器commit提交为镜像
docker commit oldboy12 centos6-ssh:v1

3:   启动新容器来测试新提交的镜像
docker run -d -p 2022:22 centos6-ssh:v1  /usr/sbin/sshd -D

手工制作:
[root@docker-01 ~]# docker run -it -p 1022:22 --name oldboy12 centos:6.9
[root@89ea5fa56348 /]# yum install openssh-server -y
[root@89ea5fa56348 /]# /etc/init.d/sshd start
[root@89ea5fa56348 /]# echo 123456|passwd  --stdin root
[root@89ea5fa56348 /]# exit
exit
[root@docker-01 ~]# docker commit oldboy12 centos6-ssh:v1
[root@docker-01 ~]# docker ps -l
[root@docker-01 ~]# docker run -d -p 2023:22 centos6-ssh:v1  /usr/sbin/sshd -D
[root@docker-01 ~]# ssh [email protected] -p 2023

(C) dockerfile 전투

[root@docker-01 kop]# cat dockerfile 
FROM  centos:6.9
RUN   yum install httpd php php-cli php-gd php-mbstring unzip -y
WORKDIR  /var/www/html
COPY     kodexplorer4.37.zip .
RUN      unzip kodexplorer4.37.zip
RUN      chmod -R 777 /var/www/html/
ADD      init.sh  /init.sh
EXPOSE   80 22
CMD      ["/bin/bash","/init.sh"]

[root@docker-01 kop]# cat init.sh 
#!/bin/bash
/etc/init.d/httpd start
tail -F /var/log/httpd/access_log
[root@docker-01 kop]# 

일레븐, 고정 표시기 개인 창고 레지스트리

(A)를 실행 고정 표시기 개인 창고

개인 창고 작업 고정 표시기 : 5000 --restart = 항상 -v / 옵션 / myregistry : 컨테이너가 완료 시작할 때의 / var / lib 디렉토리 / 레지스트리 레지스트리, 당신은 개인 창고를 사용할 수있는 고정 표시기 실행은 5000 -p가 -d

(B) 전용 창고에 업로드 화상

개인 창고 단계에 업로드 :

A : 이미지가 플레이 tag10.0.0.12에 업로드 할 : 5000 / 아파치 : (태그 수동으로 제공) 최신

B : 업로드 고정 표시기 푸시 10.0.0.12:5000/httpd:latest

을 감안할 때 해결 방법 : VI /etc/docker/daemon.json { "레지스트리 거울": [ "https://registry.docker-cn.com"],

"불안-레지스트리"[ "10.0.0.12:5000"]}

systemctl 재시작 고정 표시기

(C) 염기와 개인 인증 창고

a:base认证密码文件准备
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd  -Bbn oldboy 123456  >> /opt/registry-var/auth/htpasswd

b:启动docker私有仓库
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry 

----------------------
a:base认证密码文件准备
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd  -Bbn oldboy 123456  >> /opt/registry-var/auth/htpasswd

b:启动docker私有仓库
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry 

(D) 전투

①
[root@docker-02 ~]# docker run -d -p 5000:5000 --restart=always  -v /opt/myregistry:/var/lib/registry  registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
c87736221ed0: Pull complete 
1cc8e0bb44df: Pull complete 
54d33bcb37f5: Pull complete 
e8afc091c171: Pull complete 
b4541f6d3db6: Pull complete 
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:latest
65fecd20716b2d75419fe47e29068ccf0eb2205919baae9fe70d27894638019b
[root@docker-02 ~]# 
②
[root@docker-02 ~]# docker pull daocloud.io/huangzhichong/alpine-cn:latest
latest: Pulling from huangzhichong/alpine-cn
0a8490d0dfd3: Pull complete 
8881e0c6b9b8: Pull complete 
Digest: sha256:57c79fbd51aac09ea307ba6ddbbb4cc60f49e015d261193bacff95f9fa39d88c
Status: Downloaded newer image for daocloud.io/huangzhichong/alpine-cn:latest
daocloud.io/huangzhichong/alpine-cn:latest
[root@docker-02 ~]# cd /opt/myregistry/docker/registry/v2/
[root@docker-02 v2]# ll
total 0
drwxr-xr-x 3 root root 20 Jan 17 20:27 blobs
drwxr-xr-x 3 root root 19 Jan 17 20:27 repositories
[root@docker-02 v2]# cd repositories/
[root@docker-02 repositories]# ll
total 0
drwxr-xr-x 5 root root 55 Jan 17 20:28 httpd
[root@docker-02 repositories]# 
[root@docker-02 repositories]# ll
total 0
drwxr-xr-x 5 root root 55 Jan 17 20:31 centos
drwxr-xr-x 5 root root 55 Jan 17 20:28 httpd
[root@docker-02 repositories]# tree httpd/_manifests/tags/
③
[root@docker-02 repositories]# yum install httpd-tools -y
[root@docker-02 repositories]# mkdir /opt/registry-var/auth/ -p
[root@docker-02 repositories]# htpasswd  -Bbn oldboy 123456  >> /opt/registry-var/auth/htpasswd
[root@docker-02 repositories]# 
[root@docker-02 repositories]# 
[root@docker-02 repositories]# docker ps
[root@docker-02 repositories]# docker kill 65fecd20716b
65fecd20716b
[root@docker-02 repositories]# docker rm 65fecd20716b
[root@docker-02 repositories]# docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry
b567add48840af43273382cd5d5459c0b321d696b71c8875e4e360b023fa7297
[root@docker-02 repositories]# docker ps
④
[root@docker-01 kop]# docker images 
[root@docker-01 kop]# docker image tag httpd:latest 10.0.0.12:5000/httpd:latest
[root@docker-01 kop]# docker images 
[root@docker-01 kop]# docker push 10.0.0.12:5000/httpd:latest
The push refers to repository [10.0.0.12:5000/httpd]
Get https://10.0.0.12:5000/v2/: http: server gave HTTP response to HTTPS client
[root@docker-01 kop]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://registry.docker-cn.com"
  ],
"insecure-registries": ["10.0.0.12:5000"]

}
[root@docker-01 kop]# systemctl restart docker
[root@docker-01 kop]# docker push 10.0.0.12:5000/httpd:latest
The push refers to repository [10.0.0.12:5000/httpd]
⑤
[root@docker-01 opt]# docker tag centos:6.8 10.0.0.12:5000/centos:6.8
[root@docker-01 opt]# docker push 10.0.0.12:5000/centos:6.8
[root@docker-01 opt]# docker rmi centos:6.8 10.0.0.12:5000/centos:6.8 
Untagged: centos:6.8
Untagged: centos@sha256:39abd0c8e375de6fb7334d42ec2a46643f34cbc1bbaf37e2b484065f05eaa7a2
Error response from daemon: conflict: unable to remove repository reference "10.0.0.12:5000/centos:6.8" (must force) - container 33d9dfd21a81 is using its referenced image 82f3b5f3c58f
[root@docker-01 opt]# docker rm 33d9dfd21a81
33d9dfd21a81
[root@docker-01 opt]# docker rmi centos:6.8 10.0.0.12:5000/centos:6.8 
[root@docker-01 opt]# docker login 10.0.0.12:5000
Login Succeeded
[root@docker-01 opt]# cat /root/.docker/config.js
[root@docker-01 opt]#docker pull 10.0.0.12:5000/centos:6.8
[root@docker-01 opt]# docker images

XII 컨테이너 배열 고정 표시기-작성

(A) 고정 표시기-구성 설치

[root@docker-01 opt]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0    510      0 --:--:--  0:00:01 --:--:--   511
  0 15.4M  100 15.4M    0     0   191k      0  0:01:22  0:01:22 --:--:--  201k
▽root@docker-01 opt]# chmod +x /usr/local/bin/docker-compose
[root@docker-01 opt]# docker-compose -v
docker-compose version 1.24.1, build 4667896b


[root@docker-01 mywordpress]# vim docker-compose.yml
vi docker-compose.yml
version: '3'
services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - web_data:/var/www/html
     ports:
       - "80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
    web_data:

==================

[root@docker-01 mywordpress]# docker-compose up
[root@docker-01 mywordpress]# docker-compose up -d
[root@docker-01 mywordpress]# docker-compose scale wordpress=3
[root@docker-01 mywordpress]# docker ps 

nginx를 설치

[root@docker-02 repositories]# sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

[root@docker-02 repositories]# sudo yum install -y nginx
配置文件:
[root@docker-02 nginx]# cat nginx.conf
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
upstream wordpress {
    server 10.0.0.11:32769;
    server 10.0.0.11:32770;
    server 10.0.0.11:32771;
}
    server {
          listen       80;
          server_name  localhost;
          location / {
              proxy_pass       http://wordpress;
              proxy_set_header Host $host;
              proxy_set_header X-Real-Ip $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          } 
  }
}
[root@docker-02 nginx]# 
[root@docker-02 nginx]# systemctl start nginx

디렉토리에 테스트 구성 파일 :

[root@docker-01 _data]# pwd
/var/lib/docker/volumes/mywordpress_web_data/_data
[root@docker-01 _data]# cat info.php 
<?php phpinfo(); ?>
[root@docker-01 _data]# 
不停刷新页面发现地址代理地址不同:
http://10.0.0.12/info.php

4 네트워크 타입 열세, 용기

None:不为容器配置任何网络功能,--net=none

Container:与另一个运行中的容器共享Network Namespace,--net=container:containerID

Host:与主机共享Network Namespace,--net=host

Bridge:Docker设计的NAT网络模型(默认)


[root@docker-01 _data]# docker run -it --network none busybox:latest
检查网络类型:
docker ps -a -l
docker inspect competent_lewin

----
[root@docker-01 _data]# docker run -d httpd:latest
dbf395b9b91dbc83fdf16535d686a2e3172520022fe9142edbef0461ea11f53c
[root@docker-01 _data]# docker run -it --network container:charming_antonelli 10.0.0.12:5000/centos:6.8 ([root@docker-01 ~]# docker ps -a -l
查出name)
[root@dbf395b9b91d /]# netstat -lntp
[root@docker-01 ~]# docker ps -a -l
CONTAINER ID        IMAGE                       COMMAND             CREATED              STATUS              PORTS               NAMES
f09de4357455        10.0.0.12:5000/centos:6.8   "/bin/bash"         About a minute ago   Up About a minute                       charming_feynman
[root@docker-01 ~]# docker inspect f09de4357455
network为空。

host:
[root@docker-01 _data]# docker run -it --network host 10.0.0.12:5000/centos:6.8
[root@docker-01 /]# ifconfig 
跟宿主机共用。

넷째, macvlan에서 호스트 통신

macvlan 정의 :

macvlan 리눅스 커널 모듈 자체, 그 기능은 동일한 물리적 NIC에 MAC 어드레스를 복수 허용하는, 즉 인터페이스의 복수의 각 인터페이스는 자신의 IP와 함께 구성 될 수있다.

NIC는 자연 macvlan에 가상화 기술입니다

macvlan 실현 컨테이너 상호 호스트 통신을 사용합니다 :

创建macvlan:(两台主机都需要)
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1

测试:
docker01:
docker run -it --network macvlan_1 --ip=10.0.0.111 busybox:latest /bin/sh
docker02:
docker run -it --network macvlan_1 --ip=10.0.0.112 busybox:latest /bin/sh



[root@docker-01 _data]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
41476f94745165b43591760a9fe4541d0bf13d1c3498f84bd4daa8aa14fafe0f
[root@docker-01 _data]# docker network ls
NETWORK ID          NAME                  DRIVER              SCOPE
e3f7c473d255        bridge                bridge              local
ed8ed81588ce        host                  host                local
41476f947451        macvlan_1             macvlan             local
e8e53247c464        mywordpress_default   bridge              local
e6e9a262ab5f        none                  null                local
[root@docker-01 _data]# docker run -it --network macvlan_1 --ip=10.0.0.111 busybox:latest /bin/sh



[root@docker-02 nginx]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
2644c26dbacfe64add4eba8a792fcaee04384d08255918590367569fe5058cd9
[root@docker-02 nginx]# 
[root@docker-02 nginx]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
e60a56edfd03        bridge              bridge              local
85abdf640cbc        host                host                local
2644c26dbacf        macvlan_1           macvlan             local
daa49e0aaede        none                null                local
[root@docker-02 nginx]# docker run -it --network macvlan_1 --ip=10.0.0.112 busybox:latest /bin/sh

开启混杂模式:
[root@docker-01 _data]# ip link set eth0 promisc on
[root@docker-01 _data]# ip link show eth0 

다섯째, 호스트 간의 상호 용기 오버레이 통신

1)准备工作
docker03上:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

docker01、02上:
vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.11:2376",
  "insecure-registries": ["10.0.0.11:5000"]
}

2)创建overlay网络
docker network create -d overlay ol1

3)启动容器测试
docker run -it --network ol1 --name oldboy02  busybox:latest /bin/sh

XVI 민간 기업웨어 하우스 항구

harbor-offline-installer-v1.5.1.tgz
链接:https://pan.baidu.com/s/1Z9I7zYXSt-8ve3lFT2YCeg 
提取码:iuqj 

第一步:安装docker和docker-compose

第二步:下载harbor-offline-installer-v1.5.1.tgz

第三步:上传到/opt,并解压

第四步:修改harbor.cfg配置文件
hostname = 10.0.0.11
harbor_admin_password = 123456

第五步:执行install.sh
###
./install.sh

推送镜像:
[root@docker-02 _data]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://registry.docker-cn.com"
  ],
"insecure-registries": ["10.0.0.12:5000"],
"insecure-registries": ["10.0.0.11"]
[root@docker-02 _data]# systemctl restart docker

docker login 10.0.0.11

[root@docker-02 kop]# docker images 
[root@docker-02 kop]# docker image tag busybox:latest 10.0.0.11/library/busybox:latest
[root@docker-02 kop]# docker images 
[root@docker-02 kop]# docker push busybox:latest 10.0.0.11/library/busybox:latest
登录web页面检查,是否推送成功。
下来镜像:
[root@docker-02 _data]# vim /etc/docker/daemon.json 
"insecure-registries": ["10.0.0.11"]
[root@docker-02 _data]# systemctl restart docker
直接复制web页面,让后在需要主机上黏贴。

추천

출처www.cnblogs.com/cuiyongchao007/p/12239431.html