docker-compose安装、使用、配置、图形化界面、Harbor

docker-compose安装、使用、配置、图形化界面、Harbor

 

 

笔记

1、安装docker-compose

[root@localhost ~]# wget https://hub.fastgit.org/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64

[root@localhost ~]# mv docker-compose-Linux-x86_64 docker-compose
[root@localhost ~]# chmod +x docker-compose
[root@localhost ~]# mv docker-compose /usr/local/bin/

# docker-compose命令补全
[root@localhost ~]# curl -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

2、docker-compose的使用

# 启动一个服务后台启动
docker-compose up -d 
参数:
	-d :以守护进程方式运行
# 停止一个服务
docker-compose down

#创建一个docker_compose.yaml文件
	在里面编写内容	 #以下三种后缀都可以
	vim docker-compose.yaml
	vim docker-compose.yam
	vim docker-compose.json

3、docker-compose的配置文件

version  : 指定配置文件的版本号
services :指定项目 一个docker-compose只能有一个项目,项目里能有多个服务
	xxx : 服务名(比如nginxweb)
		image	 :指定镜像
		
#基础版本  容器名:镜像名_服务名_序号
version: "3"  
services:
  nginxweb:
    image: nginx

3.1、build

根据Dockerfile,临时构建镜像,并运行。
build	Dockerfile的路径 

[root@localhost work]# cat docker-compose.yaml 
version: "3"
services:
  django:
    build: ./django

3.2、command

指定容器启动命令。
version: "3"
services:
  nginxweb:
    build: ./django
    command: python manage.py runserver 0.0.0.0:8080

3.3、container_name

指定容器名称,默认将会使⽤ 项⽬名称_服务名称_序号 这样的格式。
version: "3"
services:
  django:
    build: ./django
    command: python manage.py runserver 0.0.0.0:8080
    container_name: djangovip

3.4、depends_on

解决容器的依赖、启动先后的问题
version: "3"
services:
  django:
    build: ./django
    command: python manage.py runserver 0.0.0.0:8080
    container_name: djangovip
  nginx:
    image: nginx
    depends_on:
      - django
      
      
#执行顺序为
[root@localhost work]# docker-compose up -d
    Creating network "work_default" with the default driver
    Creating djangovip ... done  #先django
    Creating work_nginx_1 ... done #在nginx

3.5、env_file

指定一个环境变量文件名称。 指定多个环境变量用它
version: "3"
services:
  django:
    build: ./django
    command: python manage.py runserver 0.0.0.0:8080
    container_name: djangovip
  nginx:
    image: nginx
    depends_on:
      - django
    env_file:
      - ./env

#env 里面内容
NGINX_NAME=nginx
AOTE_MAN=dijia
      
#结果
[root@localhost work]# docker exec e9e80bbb41b0 printenv
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=e9e80bbb41b0
    NGINX_NAME=nginx
    AOTE_MAN=dijia
    NGINX_VERSION=1.21.4
    NJS_VERSION=0.7.0
    PKG_RELEASE=1~bullseye
    HOME=/root

3.6、environment

设置单个环境变量。
version: "3"
services:
  django:
    build: ./django
    command: python manage.py runserver 0.0.0.0:8080
    container_name: djangovip
  nginx:
    image: nginx
    depends_on:
      - django
    env_file:
      - ./env
    environment:
      NAME: zhang
#获取环境变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=b4d706fd199c
NGINX_NAME=nginx
AOTE_MAN=dijia
NAME=zhang
NGINX_VERSION=1.21.4
NJS_VERSION=0.7.0
PKG_RELEASE=1~bullseye
HOME=/root

3.7、healthcheck

健康检查
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 1m   #延时探测
      timeout: 10s   #超时时间
      retries: 3   #时间间隔
      
#结果
[root@localhost work]# docker ps
    STATUS                             PORTS                  NAMES
   Up 35 seconds (health: starting)   80/tcp                 work_nginx_1
   #过了一会
   Up 2 minutes (healthy)

3.8、networks

  nginx:   #服务名
    networks: #服务里的
      - sailuo
networks:  #和services、version平级
  sailuo:

#可以一起用
定义服务中的network,代表指定使用哪个网桥; #在服务里面
定义在顶级中的network,代表创建的networks   #和version、services平级

3.9、ports

映射端口 暴露端口
ports: 
	- 8092:80  - 8093:443
	
#结果
 PORTS                                         NAMES
  0.0.0.0:8092->80/tcp, 0.0.0.0:8093->443/tcp   work_nginx_1

3.10、sysctls

设置内核参数。
sysctls:  
    - net.core.somaxconn=1024  
    - net.ipv4.tcp_syncookies=0

3.11 ulimits

 ulimits:
 	nproc: 65535
 	nofile:
         soft: 20000
         hard: 40000
 
# 例如,指定最⼤进程数为 65535,指定⽂件句柄数为 20000(软限制,应⽤可以随时修改,不能超过硬限制) 和
40000(系统硬限制,只能 root ⽤户提⾼)。

3.12、volumes(文件挂载,宿主主机和容器)

#数据卷所挂载路径设置,该指令中路径⽀持相对路径。
volumes:
  - /opt:/usr/share/nginx/html
 
# 数据卷所挂载路径设置。可以设置为宿主机路径( HOST:CONTAINER )或者数据卷名称( VOLUME:CONTAINER ),并且 可以设置访问模式 ( HOST:CONTAINER:ro )。 
#在容器内部
root@90c3f69e2eee:/usr/share/nginx/html# ls -l
total 0
drwx--x--x. 4 root root 28 Dec 29 08:26 containerd
root@90c3f69e2eee:/usr/share/nginx/html# touch 1.txt

#在宿主主机
[root@localhost work]# cd /opt
[root@localhost opt]# ll
total 0
-rw-r--r--. 1 root root  0 Dec 30 21:08 1.txt
drwx--x--x. 4 root root 28 Dec 29 16:26 containerd

案例:

version: "3"
services:
  django:
    build: ./django
    container_name: django
    networks:
      - nginx
  nginx:
    build: ./nginx
    ports:
      - 8098:80
    networks:
      - nginx
    depends_on:
      - django
networks:
  nginx:

bbs

version: "3"
services:
  bbs:
    build: ./bbs
    container_name: bbs
    networks:
      - nginx
  nginx:
    build: ./nginx
    ports:
      - 8098:80
    depends_on:
      - bbs
    networks:
      - nginx
networks:
  nginx:

docker图形化

version: "3"
services:
  portainer:
    image: cr.portainer.io/portainer/portainer-ce:2.9.3
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer_data:/data
    ports:
    - 8000:8000
    - 9443:9443
    container_name: portainer

4、Harbor

		Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,
		设计镜像复制和中文支持等功能。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 
		确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

4.1、配置HTTPS

1、生成CA证书私钥
mkdir /opt/cert
cd /opt/cert

openssl genrsa -out ca.key 4096

2、生成CA证书  #注意 这里用的是自己的ip
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=ShangHai/L=ShangHai/O=Oldboy/OU=Linux/CN=192.168.15.101" \
 -key ca.key \
 -out ca.crt

3、生成服务器证书 #注意 这里用的是自己的ip
openssl genrsa -out 192.168.15.101.key 4096

4、生成证书签名请求 #注意 这里用的是自己的ip
openssl req -sha512 -new \
    -subj "/C=CN/ST=ShangHai/L=ShangHai/O=Oldboy/OU=Linux/CN=192.168.15.101" \
    -key 192.168.15.101.key \
    -out 192.168.15.101.csr

5、生成一个x509 v3扩展文件
# 域名版
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

# IP版  没有域名用这个
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.15.101
EOF

6、使用该v3.ext文件生成证书
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in 192.168.15.101.csr \
    -out 192.168.15.101.crt
    
7、提供证书给Harbor和Docker
#加密证书生成一个.cert  docker要加载的
openssl x509 -inform PEM -in 192.168.15.101.crt -out 192.168.15.101.cert

mkdir -pv /etc/docker/certs.d/192.168.15.101/

cp 192.168.15.101.cert /etc/docker/certs.d/192.168.15.101/
cp 192.168.15.101.key /etc/docker/certs.d/192.168.15.101/
cp ca.crt /etc/docker/certs.d/192.168.15.101/

# 如果nginx端口默认部署443和80  ,是默认端口不用执行这句话
/etc/docker/certs.d/192.168.15.101:port
/etc/docker/certs.d/192.168.15.101:port

# 复制Harbor证书
mkdir -p /data/cert 
cp 192.168.15.101.crt  /data/cert
cp 192.168.15.101.key /data/cert
cd /data/cert

8、证书受信 #网上买的 阿里云等  不需要授信了
在/etc/docker/daemon.json 中添加如下内容
{
  "registry-mirrors": ["https://uksar295.mirror.aliyuncs.com"],#之前带的  记得逗号
  "insecure-registries": ["192.168.15.101"]
}

9、docker加载证书
systemctl restart docker

4.2、安装Harbor

1、安装harbor
[root@localhost ~]# tar -xf harbor-offline-installer-v2.3.3.tgz  -C /usr/local/

#载入镜像
	cd /usr/local/harbor
	docker load < harbor.v2.3.3.tar.gz 

2、修改harbor的配置文件
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
hostname: 192.168.15.101
https:
  certificate: /data/cert/192.168.15.101.crt
  private_key: /data/cert/192.168.15.101.key

3、安装启动
./install.sh

#会自动创建一个docker-compose.yml

#登录账号admin  默认密码Harbor12345

4.3、其他机器docker免密

#在100的机器上
mkdir -pv /etc/docker/certs.d/192.168.15.101/

#在Harbor的机器上
cd /opt/cert
scp 192.168.15.101.cert root@192.168.15.100:/etc/docker/certs.d/192.168.15.101/
scp 192.168.15.101.key root@192.168.15.100:/etc/docker/certs.d/192.168.15.101/
scp ca.crt root@192.168.15.100:/etc/docker/certs.d/192.168.15.101/

# 证书受信
在/etc/docker/daemon.json 中添加如下内容
{
  "registry-mirrors": ["https://uksar295.mirror.aliyuncs.com"], #之前就有的
  "insecure-registries": ["192.168.15.101"]
}

systemctl restart docker


#测试
1.登录
	docker login 192.168.15.101
2.打包
	docker tag nginx:latest 192.168.15.101/linux/nginx:latest
3.上传
	docker push 192.168.15.101/linux/nginx:latest

在这里插入图片描述

 

posted @ 2021-12-31 10:11  迪迦张  阅读(851)  评论(0编辑  收藏  举报