赞
踩
目录
1.1.1 FROM :指定基础镜像,必须放在Dockerfile文件第一个非注释行
默认情况下,docker bulid会在docker主机上查找指定的镜像文件,如果不存在,则会从Docker Hub Registry上拉去所需的镜像文件,如果找不到则会返回错误信息。
如果指定FROM scratch 则是指定一个空镜像
FROM [--platform=<platform>] <image> [AS <name>]FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]# 说明 :--platform 指定镜像的平台,比如 : linux/amd64, linux/arm64, or windows/amd64tag 和 digest 是可选项,如果不指定,默认为 latest
# 一行格式LABEL multi .label1 = "value1" multi .label2 = "value2" other = "value3"# 多行格式LABEL multi .label1 = "value1" \multi .label2 = "value2" \other = "value3"
#shell 格式 : 相当于 /bin/sh -c < 命令 > 此种形式支持环境变量RUN < 命令 >#exec 格式 : 此种形式不支持环境变量 , 注意 : 是双引号 , 不能是单引号RUN [ "executable" , "param1" , "param2" ...]#exec 格式可以指定其它 shellRUN [ "/bin/bash" , "-c" , "echo hello wang" ]
# 变量赋值格式 1ENV <key> <value> # 此格式只能对一个 key 赋值 ,<key> 之后的所有内容均会被视作其 <value> 的组成部分# 变量赋值格式 2ENV <key1> = <value1> <key2> = <value2> \ # 此格式可以支持多个 key 赋值 , 定义多个变量建议使用 ,减少镜像层<key3> = <value3> ...# 如果 <value> 中包含空格,可以以反斜线 \ 进行转义,也可通过对 <value> 加引号进行标识 ; 另外,反斜线也可用于续行# 只使用一次变量RUN <key> = <value> <command># 引用变量RUN $key .....# 变量支持高级赋值格式${key:-word}${key:+word}
docker run -e |--env <key> = <value># 说明-e , --env list #Set environment variables--env-file filename #Read in a file of environment variables
COPY [--chown = <user>:<group>] <src>... <dest>COPY [--chown = <user>:<group>] [ "<src>" ,... "<dest>" ] # 路径中有空白字符时 , 建议使用此格式
该命令可认为是增强版的COPY,不仅支持COPY,还支持自动解压缩。可以将复制指定的 到容器中的
ADD [ -- chown = <user> : <group> ] <src> ... <dest>ADD [--chown= <user> : <group> ] [" <src> ",... " <dest> "]
# 使用 exec 执行,推荐方式,第一个参数必须是命令的全路径 , 此种形式不支持环境变量CMD [ "executable" , "param1" , "param2" ]# 在 /bin/sh 中执行,提供给需要交互的应用;此种形式支持环境变量CMD command param1 param2# 提供给 ENTRYPOINT 命令的默认参数CMD [ "param1" , "param2" ]
功能类似于CMD,配置容器启动后执行的命令及参数
# 使用 exec 执行ENTRYPOINT [ "executable" , "param1" , "param2" ...]# shell 中执行ENTRYPOINT command param1 param2
[root@ubuntu2204 nginx-web-entrypint] #cat DockerfileFROM nginx-alpine:1.24.0-v4.0LABEL maintainer = "wangxiaochun <root@wangxiaochun.com>"RUN mkdir -p /data/website#COPY index.html /data/websiteCOPY entrypoint.sh /CMD [ "nginx" , "-g" , "daemon off;" ]ENTRYPOINT [ "/entrypoint.sh" ][root@ubuntu2204 nginx-web-entrypint] #cat entrypoint.sh#!/bin/sh##********************************************************************#Author: wangxiaochun#QQ: 29308620#Date: 2023-06-14#FileName: entrypiont.sh#URL: http://www.wangxiaochun.com#Description: The test script#Copyright (C): 2023 All rights reserved#********************************************************************# 注意: alpine 镜像没有 bash ,此处使用 shcat > /apps/nginx/conf/conf.d/www.conf <<EOFserver {server_name ${HOST:-"www.wangxiaochun.com"} ;listen ${IP:-0.0.0.0} : ${PORT:-80} ;root ${DOC_ROOT:-/apps/nginx/html} ;}EOFecho ${HOST:-"www.wangxiaochun.com"} >${DOC_ROOT:-/apps/nginx/html} /index.html#nginx -g "daemon off;"exec " $@ "
Docker 的网络支持5种网络模式:
范例: 查看默认的网络模式有三个
[root@ubuntu1804 ~] #docker network lsNETWORK ID NAME DRIVER SCOPEfe08e6d23c4c bridge bridge localcb64aa83626c host host local10619d45dcd4 none null local
指定网络模式:
docker run --network <mode>docker run --net = <mode><mode>: 可是以下值nonebridgehostcontainer:< 容器名或容器 ID>< 自定义网络名称 >
# 修改桥接地址[root@ubuntu1804 ~] #vim /lib/systemd/system/docker.serviceExecStart = /usr/bin/dockerd -H fd:// --containerd = /run/containerd/containerd.sock--bip = 10 .100.0.1/24
[root@ubuntu1804 ~] #vim /etc/docker/daemon.json{"hosts" : [ "tcp://0.0.0.0:2375" , "fd://" ],"bip" : "192.168.100.100/24" , # 分配 docker0 网卡的 IP,24 是容器 IP 的 netmask"fixed-cidr" : "192.168.100.128/26" , # 分配容器 IP 范围 ,26 不是容器 IP 的子网掩码 , 只表示地址范围"fixed-cidr-v6" : "2001:db8::/64" ,"mtu" : 1500 ,"default-gateway" : "192.168.100.200" , # 网关必须和 bip 在同一个网段"default-gateway-v6" : "2001:db8:abcd::89" ,"dns" : [ "1.1.1.1" , "8.8.8.8" ]}[root@ubuntu1804 ~] #systemctl restart docker
# 创建 host 模式的容器[root@ubuntu1804 ~] #docker run -d --network host --name web1 nginx-centos7-base:1.6.141fb5b8e41db26e63579a424df643d1f02e272dc75e76c11f4e313a443187ed1# 创建容器后,宿主机的 80/tcp 端口打开[root@ubuntu1804 ~] #ss -ntlp|grep :80LISTEN 0 128 0 .0.0.0:80 0 .0.0.0:*users:(( "nginx" ,pid = 43762 ,fd = 6 ),( "nginx" ,pid = 43737 ,fd = 6 ))
[root@ubuntu2004 ~] #docker run -d -p 80:80 --name wordpress -v/data/wordpress:/var/www/html --restart=always wordpress:php7.4-apache[root@ubuntu2004 ~] #docker run --network container:wordpress -eMYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -eMYSQL_PASSWORD=123456 --name mysql -d -v /data/mysql:/var/lib/mysql --restart=always mysql:8.0.29-oracle# 注意:数据库主机地址为 127.0.0.1 ,不支持 localhost
范例: 第一个容器使用host网络模式,第二个容器与之共享网络
[root@ubuntu1804 ~] #docker run -d --name c1 --network host nginxcentos7.8:v5.0-1.18.05a60804f3917d82dfe32db140411cf475f20acce0fe4674d94e4557e1003d8e0[root@ubuntu1804 ~] #docker run -it --name c2 --network container:c1centos7.8:v1.0[root@ubuntu1804 /] # ip a1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN groupdefault qlen 1000link/loopback 00 :00:00:00:00:00 brd 00 :00:00:00:00:00inet 127 .0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2 : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UPgroup default qlen 1000link/ether 00 :0c:29:63:8b:ac brd ff:ff:ff:ff:ff:ffinet 10 .0.0.100/24 brd 10 .0.0.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe63:8bac/64 scope linkvalid_lft forever preferred_lft forever3 : docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue stateDOWN group defaultlink/ether 02 :42:24:86:98:fb brd ff:ff:ff:ff:ff:ffinet 172 .17.0.1/16 brd 172 .17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:24ff:fe86:98fb/64 scope linkvalid_lft forever preferred_lft forever[root@ubuntu1804 ~] #docker exec -it c1 bash[root@ubuntu1804 /] # ip a1 : lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN groupdefault qlen 1000link/loopback 00 :00:00:00:00:00 brd 00 :00:00:00:00:00inet 127 .0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2 : eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UPgroup default qlen 1000link/ether 00 :0c:29:63:8b:ac brd ff:ff:ff:ff:ff:ffinet 10 .0.0.100/24 brd 10 .0.0.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe63:8bac/64 scope linkvalid_lft forever preferred_lft forever3 : docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue stateDOWN group defaultlink/ether 02 :42:24:86:98:fb brd ff:ff:ff:ff:ff:ffinet 172 .17.0.1/16 brd 172 .17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:24ff:fe86:98fb/64 scope linkvalid_lft forever preferred_lft forever[root@ubuntu1804 /] #
除了以上的网络模式,也可以自定义网络,使用自定义的网段地址,网关等信息
docker network create -d <mode> --subnet <CIDR> --gateway < 网关 > < 自定义网络名称 ># 注意 mode 不支持 host 和 none, 默认是 bridge 模式-d <mode> 可省略,默认为 bridg
docker network inspect < 自定义网络名称或网络 ID>
docker run --network < 自定义网络名称 > < 镜像名称 >docker run --net < 自定义网络名称 > --ip < 指定静态 IP> < 镜像名称 ># 注意:静态 IP 只支持自定义网络模型
doccker network rm < 自定义网络名称或网络 ID>
[root@ubuntu2004 ~] #docker network create -d bridge --subnet 172.27.0.0/16 --gateway 172.27.0.1 bridge2[root@ubuntu2004 ~] #docker run -d -p 8080:80 --network bridge2 --namewordpress2 -v /data/wordpress2:/var/www/html --restart=always wordpress:php7.4-apache[root@ubuntu2004 ~] #docker run --network bridge2 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=123456 --name mysql2 -d -v /data/mysql2:/var/lib/mysql --restart=always mysql:8.0.29-oracle#wordpress 连接数据库时,数据库主机是容器的名称 mysql2
注意:搭建harbor,必须先安装docker以及docker compose
#提前下载haproxy tar包文件或者使用wget在线下载,不推荐在线下载
wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.2.tgz
#解压缩到指定目录tar xvf harbor-offfline-installer-v2.8.2.tgz -C 、/apps
cd /apps/harbor
#修改配置文件
cp harbor.yml.tmpl harbor.yml
HARBOR_NAME=`hostname -I|awk '{print $1}'`
sed -ri "/^hostname/s/reg.mydomain.com/${HARBOR_NAME}/" harbor.yml
sed -ri "/^https/s/(https:)/#\1/" harbor.yml
sed -ri "s/(port: 443)/#\1/" harbor.yml
sed -ri "/certificate:/s/(.*)/#\1/" harbor.yml
sed -ri "/private_key:/s/(.*)/#\1/" harbor.yml
sed -ri "s/Harbor12345/123456/" harbor.yml
sed -i 's#^data_volume: /data#data_volume: /data/harbor#' harbor.yml
#安装python,运行harbor安装脚本
apt -y install python
/apps/harbor/install.sh
#成功安装harbor后查看容器
[root@ubuntu1804 ~] #docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bceb7edd65d6 goharbor/harbor-jobservice:v2.8.2 "/harbor/entrypoint.…" 8 seconds ago Up 5 seconds (health: starting) harbor-jobservice
b76a3dc29d9a goharbor/nginx-photon:v2.8.2 "nginx -g 'daemon of…" 8 seconds ago Up 7 seconds (health: starting) 0.0.0.0:80->8080/tcp, :::80->8080/tcp nginx
93d16deeff91 goharbor/harbor-core:v2.8.2 "/harbor/entrypoint.…" 8 seconds ago Up 8 seconds (health: starting) harbor-core
d433df44e31b goharbor/harbor-registryctl:v2.8.2 "/home/harbor/start.…" 9 seconds ago Up 8 seconds (health: starting) registryctl
3bbb2071bb2e goharbor/harbor-db:v2.8.2 "/docker-entrypoint.…" 9 seconds ago Up 8 seconds (health: starting) harbor-db
0c334e971fa8 goharbor/redis-photon:v2.8.2 "redis-server /etc/r…" 9 seconds ago Up 8 seconds (health: starting) redis
ee08f68db46b goharbor/harbor-portal:v2.8.2 "nginx -g 'daemon of…" 9 seconds ago Up 8 seconds (health: starting) harbor-portal
f02846d56bee goharbor/registry-photon:v2.8.2 "/home/harbor/entryp…" 9 seconds ago Up 8 seconds (health: starting) registry
78e96d5fbc3c goharbor/harbor-log:v2.8.2 "/bin/sh -c /usr/loc…" 9 seconds ago Up 9 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log
登录harbor页面
新建项目
准备一个本地镜像
root@ubuntu2004:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine-base 1.0 63341a78f287 1 hours ago 5.59MB#上传镜像前需要先登录harbor
root@ubuntu2004:/apps/harbor# docker login harbor.huang.org
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
#给镜像贴标签
root@ubuntu2004:~# docker tag alpine-base:v1.0 harbor.huang.org/homework/alpine-base:v1.0
root@ubuntu2004:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine-base v1.0 c4a11418aa85 About a minute ago 5.59MB
harbor.huang.org/homework/alpine-base v1.0 c4a11418aa85 About a minute ago 5.59MB#上传镜像
root@ubuntu2004:~# docker push harbor.huang.org/homework/alpine-base:v1.0
The push refers to repository [harbor.huang.org/homework/alpine-base]
8d3ac3489996: Pushed
v1.0: digest: sha256:96c3a6f7a362073dec55bb206c34ae4ba065340d3f961d485ff8a34bcc680e3f size: 528
验证上传成功
JumpServer安装环境要求:
mysql,redis
官方一键安装脚本
curl -sSL
https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash
创建用户huang
创建运维组,并将huang加入组内
JumpServer 可以管理各种类型的资产
创建管理用户(系统用户中特权用户)
创建资产
创建节点dev,创建资产10.0.0.200
创建系统用户(系统用户中普通用户)
关联使用系统用户的资产
切换用户huang,登录链接资产
历史会话可以回放用户的操作
创建命令过滤规则
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。