docker学习笔记
1、上线流程繁琐 开发->测试->申请资源->审批->部>测试等环节 2、资源利用率低 普遍服务器利用率低,造成过多浪费 3、扩容/缩容不及时 业务高峰期扩容流程繁琐,上线不及时 4、服务器环境瘫肿 服务器越来越臃肿,对维护、迁移带来困难 5、环境不一致性 |
虚拟机与容器的对比: 虚拟化硬件-->宿主机-->中间软件层-->子系统-->应用 硬件-->主机系统-->docker引擎-->容器应用(相比虚拟化少了一个子系统) |
Container |
VM |
|
启动速度 |
秒级 |
分钟级 |
允许性能 |
接近原生 |
5%左右损失 |
磁盘占用 |
MB |
GB |
数量 |
成百上千 |
一般几十台 |
隔离性 |
进程级 |
系统级(更彻底) |
操作系统 |
主要支持Linux |
几乎所有 |
封装程度 |
只打包项目代码和依赖关系,共享宿主机内核 |
完整的操作系统 |
1、已知 2、未知 业务机器增加承载量,可以应对一些突发,30% --弹性伸缩 开发人员: 1、开发项目 2、打包项目环境+代码成镜像 3、部署到容器平台 运维人员:怎么高效去管理这些容器 好处: 1、运维人员节省人工成本 2、持续发布有问题更快解决 |
容器: 1、容器提供一个基本的独立环境,实现容器隔离、资源限制主要解决应用层面问题,应用快速部署、高效管理 虚拟机: 1、提升服务器资源利用率 2、提供一个完全隔离的环境 Docker是什么: (1)使用最广泛的开源容器引擎 (2)一种操作系统级的虚拟化技术 (3)依赖于Linux内核特性: Namespace(资源限制)和Cgroups(资源隔离) (4)一个简单的应用程序打包工具 Docker设计目标:
Docker应用场景: 应用程序打包和发布 应用程序隔离 持续集成 部署微服务 快速搭建测试环境 提供PaaS产品(平台即服务) |
Daocker的基本组成: Docker客户端-->docker的主机<-->docker镜像 版本所支持平台: Docker版本: 社区版(CE) 企业版(EE) 支持平台: Linux MAC Windows |
Docker的官网: Yum安装docker: https://docs.docker.com/engine/install/centos/ 二进制安装: https://docs.docker.com/engine/install/binaries/ https://download.docker.com/linux/static/stable/ 主版本20--修复版本10--bug修复版本 |
一个分层存储的文件,不是一个单一的文件 一个软件的环境 一个镜像可以创建N个容器 一种标准化的交付 一个不包含Linux内核而又精简的Linux操作系统 |
[root@cka-1 ~]# vi /etc/docker/daemon.json { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } [root@cka-1 ~]# systemctl restart docker.service 多个加速器 [root@libin ~]# cat /etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] } |
指令 |
描述 |
ls |
列出镜像 |
build |
构建镜像来自Dockerfile |
history |
查看镜像历史 |
inspect |
显示一个或多个镜像详细信息 |
pull |
从镜像仓库拉取镜像 |
push |
推送一个镜像到镜像仓库 |
rm |
移除一个或多个镜像 |
prune |
移除没有被标记或者没有被任何容器引用的镜像 |
tag |
创建一个引用源镜像标记目标镜像 |
save |
保存一个或多个镜像到一个tar归档文件 |
load |
加载镜像来自tar归档或标准输入 |
选项 |
描述 |
-i, -interactive |
交互式 |
-t, -tty |
分配一个伪终端 |
-d, -detach |
运行容器到后台 |
-e,-env |
设置环境变量 |
-p, -publish list |
发布容器端口到主机,暴露端口 |
-P -publish-all |
发布容器所有EXPOSE的端口到宿主机随机端口 |
--name string |
指定容器名称 |
-h, -hostname |
设置容器主机名 |
--ip string |
指定容器IP,只能用于自定义网络 |
--network |
连接容器到一个网络 |
-v, -volume list --mount mount (新方式) |
将文件系统附加到容器 |
--restart string |
容器退出时重启策略,默认no,可选值: [always|on-failure] |
-m,-memory |
容器可以使用的最大内存量 |
-memory-swap |
允许交换到磁盘的内存量 |
-memory-swappiness=<0-100> |
容器使用SWAP分区交换的百分比 (0-100,默认为-1) |
-oom-kill-disable |
禁用OOM Killer |
--cpus |
可以使用的CPU数量 |
-cpuset-cpus |
限制容器使用特定的CPU核心,如(0-3,0,1) |
-cpu-shares |
CPU共享 (相对权重) |
选项 |
描述 |
ls |
列出容器 |
inspect |
查看一个或多个容器详细信息 |
exec |
在运行容器中执行命令 |
commit |
创建一个新镜像来自一个容器 |
cp |
拷贝文件/文件夹到一个容器 |
logs |
获取一个容器日志 |
port |
列出或指定容器端口映射 |
top |
显示一个容器运行的进程 |
stats |
显示容器资源使用统计 |
stop/start/restart |
停止/启动一个或多个容器 |
rm |
删除一个或多个容器 |
prune |
移除已停止的容器 |
[root@localhost ~]# sudo yum install -y yum-utils 添加到yum仓库(建议添加阿里云) 阿里云源: [root@cka-1 yum.repos.d]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@cka-1 yum.repos.d]#sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' -i.bak /etc/yum.repos.d/CentOS-*.repo [root@localhost ~]# sudo yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo 卸载旧版本 [root@localhost ~]# sudo yum remove docker \ > docker-client \ > docker-client-latest \ > docker-common \ > docker-latest \ > docker-latest-logrotate \ > docker-logrotate \ > docker-engine 查看可用的版本 [root@cka-1 ~]# yum list docker-ce --showduplicates | sort -r 安装社区版docker [root@cka-1 ~]# yum install docker-ce -y 启动和开机自启 [root@cka-1 ~]# systemctl start docker [root@cka-1 ~]# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 查看已安装的docker的详细信息 [root@cka-1 ~]# docker info [root@cka-1 ~]# docker ps(列出有哪些容器) [root@cka-1 diff]# docker container ls(与docker ps一样) 关闭selinux [root@cka-1 ~]# vim /etc/selinux/config SELINUX=disabled [23:36:14 root@libin3 ~]# getenforce Disabled 关闭防火墙 [root@cka-1 ~]# systemctl stop firewalld.service [root@cka-1 ~]# systemctl disable firewalld.service [root@cka-1 ~]# iptables -vnL 重启 [root@cka-1 ~]# shutdown -r 0 配置docker加速器 [root@cka-1 ~]# vi /etc/docker/daemon.json { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] } [root@cka-1 ~]# systemctl restart docker.service 可用查看配置的加速器 [root@cka-1 ~]# docker info | grep -A2 "Registry Mirrors" Registry Mirrors: https://b9pmyelo.mirror.aliyuncs.com/ 启动一个nginx镜像 旧[root@cka-1 ~]# docker run -d nginx 新[root@cka-1 ~]# docker container run -d nginx 列出本地的镜像 [root@cka-1 ~]# docker image ls 查看一个镜像有哪些步骤 [root@cka-1 ~]# docker history nginx 以json形式查看镜像的详细信息 [root@cka-1 ~]# docker inspect nginx 移除所有没有与容器关联的镜像 [root@cka-1 ~]# docker image prune -a 镜像的导出并拷贝到其他机器导入(场景:将一个能上网的机器使用先使用docker pull到本地,再docker save命令将镜像导出,再通过scp到不能上网的机器上,在不能上网的机器上使用docker load导入到本地) [root@cka-1 ~]# docker pull redis 导出归档包, [root@cka-1 ~]# docker save redis -o redis.tar [root@cka-1 ~]# du -sh redis.tar 不解压查看内容,校验时如果内容发生变化,就会从镜像仓库去拉取最新的 [root@cka-1 ~]# tar xvf redis.tar 拷贝到一台不能上网的机器 [root@cka-1 ~]# scp redis.tar root@192.168.137.135:~ 将镜像导入到本地 [root@libin ~]# docker load -i redis.tar 再启动镜像 [root@libin ~]# docker run -d redis 如果需要访问,就需要暴露一个端口 [root@cka-1 ~]# docker run -d -p 8080:80 nginx 746f043e8c88303bbbef800b0c79eaee503ff91defd2c6880bd3cd439c05fb3f 测试 [root@libin ~]# curl 192.168.137.136:8080 Docker容器管理: 先查看容器ID(-l:查看最新的容器) [root@cka-1 ~]# docker ps 进入到容器 [root@cka-1 ~]# docker exec -it 746f043e8c88 bash root@746f043e8c88:/# root@746f043e8c88:/# exit 先启动一个centos的镜像 [root@cka-1 ~]# docker run -d centos (退出状态) 再启动一个nginx的镜像(启动状态) [root@cka-1 ~]# docker run -d nginx [root@cka-1 ~]# docker run -it -d nginx(启动状态) [root@cka-1 ~]# docker run -it -d centos(启动状态) 说明:centos室没有任何进程,nginx有守护进程,-it为容器提供伪终端,去hang住了容器,因此才不会退出,-d是放到后台去使用 -e设置一个变量到容器中;-p (s宿主机端口88:80服务端口) ;-name 设置容器名字;-h 设置主机名 --restart=always(设置容器自动启动) [root@cka-1 ~]# docker run -d -e env=cka_prod -p 88:80 --name web -h web --restart=always nginx edb6fedd54a00472dfffa718377fde02f2bf9d173e69e306e7a6bab1d1c0548c 进入web容器并配置页面或者免交互 [root@cka-1 diff]# docker exec web ls(免交互对容器指向命令) [root@cka-1 ~]# docker exec -it web bash root@web:/# cd /usr/share/nginx/ root@web:/usr/share/nginx# ls html root@web:/usr/share/nginx# cd html/ root@web:/usr/share/nginx/html# ls 50x.html index.html root@web:/usr/share/nginx/html# echo "<h1>welcome to study k8s</h1>" > index.html 查看变量 root@web:/usr/share/nginx/html# exit exit [root@cka-1 ~]# docker exec -it web bash root@web:/# hostname web root@web:/# echo $env cka_prod 查看容器的视图 限制容器内存和cpu(最多使用500M和1核CPU) [root@cka-1 diff]# docker run -m="500m" --cpus="1" -d nginx 查看一个容器的日志 查看一个容器的端口 [root@cka-1 diff]# docker port web 80/tcp -> 0.0.0.0:88 80/tcp -> :::88 查看容器的进程 [root@cka-1 diff]# docker top web 查看容器的资源使用率,例如打印CPU使用率 [root@cka-1 diff]# docker stats web --no-stream | awk 'NR==2{print $3}' 查看所有状态的容器 [root@cka-1 diff]# docker ps -a 查看所有容器的ID [root@cka-1 diff]# docker ps -q 快速移除以退出的容器 [root@cka-1 diff]# docker container prune [root@cka-1 diff]# docker rm $(docker ps -q) 强制删除所有的容器 [root@libin ~]# docker rm -f $(docker ps -q) |
(1)Docker提供三种方式将数据从宿主机挂载到容器中: volumes: Docker管理宿主机文件系统的一部分 (/var/lib/docker/volumes)保存数据的最佳方式。 bind mounts: 将宿主机上的任意位置的文件或者目录挂载到容器中。 内存方面:基本不用 volumes示例: 1、创建数据卷 # docker volume create nginx-vol # docker volume ls #docker volume inspect nginx-vol
# docker run -d --name=nginx-test --mount type=bind,src=/app/wwwroot.dst=/usr/share/nginx/htmI nginx # docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/htmI nginx bind mounts示例: 1、挂载宿主机目录到容器 # docker run -d --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx # docker run -d --name=nginx-test -v nginx-vol:/usr/share/nginx/htmI nginx |
把上个实验的容器给清空(容器删除,容器里面的内容也会被删除) [root@cka-1 ~]# docker rm -f $(docker ps -q) bind mounts的方式:/opt/www/cka/目标容器的目录,也就是持久化的目录 挂载宿主机目录到容器(名字为web 暴露宿主机端口为88,容器端口为80) [root@cka-1 ~]# docker run -d --name web -p 88:80 -v /opt/www/cka/:/usr/share/nginx/html nginx [root@cka-1 ~]# docker run -d -e env=cka_prod -p 88:80 --name web -h web -v /opt/www/cka/:/usr/share/nginx/html --restart=always nginx(这里多了开机自启) 这里变成403的原因是宿主机将nginx的网页覆盖了 进入nginx容器,编辑一个网页 [root@cka-1 ~]# docker exec -it web bash root@e081d06c49c7:/# cd /usr/share/nginx/html/ root@e081d06c49c7:/usr/share/nginx/html# echo "<h1>welcom to study k8s_cka</h1>" > index.html root@e081d06c49c7:/usr/share/nginx/html# exit 在宿主机上,修改页面 [root@cka-1 ~]# vim /opt/www/cka/index.html 再删除容器,再启动容器,我们看看是什么现象,页面是不会改变的 [root@cka-1 ~]# docker rm -f web web 总结:制作镜像
|
容器网络命令空间: 容器内(eth0:172.17.0.2)<---网线veth--->docker0(交换机)-->宿主机eth0:192.168.0.2 引入docker0一方面时解决容器之间在二层里面通信;能让容器的数据包到达宿主机上;能让宿主机上的数据包通过docker0网桥给流入到容器里面; veth pair:成对出现的一种虚拟网络设备,数据从一端进从另一端出。用于解决网络命名空间之间隔离。 docker0:网桥是一个二层网络设备,通过网桥可以将Linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信。 Docker使用iptables实现网络通信: (1)外部访问容器:(DNAT目标地址转换,88->80) iptables -t nat -vnL DOCKER 数据包(外界)-->eth0--DNAT-->docker0-->veth-->eth0(容器) (2)容器访问外部(源地址转换): iptables -t nat -vnL POSTROUTING 数据包(容器)-->eth0--veth-->docker0-->snat-->eth0(外界) [root@cka-1 ~]# docker run -d -it busybox [root@cka-1 ~]# docker exec -it e8cf22ce39a4 sh / # ping www.baidu.com [root@cka-1 ~]# iptables -t nat -vnL POSTROUTING |
Docker通过Dockerfile自动构建镜像,Dockerfile是一个包含用于组建镜像的文本文件,由一条一条的指令组成。 逐步执行: FROM centos:laster(引用镜像) LABEL maintalner cka(打标签) RUN yum install gcc -y(执行shell命令) COPY run.sh /usr/bin(拷贝一个文件) EXPOSE 80(声明暴露一个端口不是实际暴露) CMD [“run.sh”](启动应用程序) |
指令 |
描述 |
FROM |
构建新镜像是基于哪个镜像 |
LABEL |
标签 |
RUN |
构建镜像时运行的Shell命令 |
COPY |
拷贝文件或目录到镜像中 |
ADD |
解压压缩包并拷贝 |
ENV |
设置环境变量 |
USER |
为RUN、CMD、ENTRYPOINT执行命令指定运行用户 |
EXPOSE |
声明容器运行的服务端口 |
WORKDIR |
为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录 |
CMD |
运行容器时默认执行,如果有多个CMD指令,最后一个生效 |
构建镜像命令: Usage: docker build [OPTIONS] PATH URL | - [flags] Options: -t,--tag list # 镜像名称 -f --file string # 指定Dockerfile文件位置 # docker build -t shykes/myapp . # docker build -t shykes/myapp -f /path/Dockerfile /path # docker build -t shykes/myapp http://www.example.com/Dockerfile |
[root@cka-1 ~]# mkdir dockerfile [root@cka-1 ~]# cd dockerfile/ [root@cka-1 dockerfile]# vim Dockerfile (这里只能能写Dockerfile;这里采用yum方式安装nginx,编译的方式后面我也实验了) FROM centos:7 RUN yum install epel-release -y && \ yum install nginx -y CMD ["nginx","-g","daemon off;"] 编译的方式:
[root@cka-1 dockerfile]# docker build -t nginx:v1 . 如果构建dockerfile时报错: 临时解决: [root@cka-1 dockerfile]# echo 1 > /proc/sys/net/ipv4/ip_forward (打开内核转发功能) [root@cka-1 dockerfile]# echo 1 >/proc/sys/net/bridge/bridge-nf-call-iptables [root@cka-1 dockerfile]# sysctl -w net.ipv4.ip_forward=1 永久解决:(我这里采用这种) [root@cka-1 dockerfile]# vi /etc/sysctl.conf net.ipv4.ip_forward=1 [root@cka-1 dockerfile]# systemctl restart network [root@cka-1 dockerfile]# systemctl restart docker |
编译安装nginx [root@cka-1 ~]# unzip dockerfile.zip [root@cka-1 ~]# cd dockerfile/ [root@cka-1 dockerfile]# ls Dockerfile java nginx php tomcat [root@cka-1 dockerfile]# cd nginx/ [root@cka-1 nginx]# ll 总用量 1016 -rw-r--r-- 1 root root 709 6月 20 2020 Dockerfile -rw-r--r-- 1 root root 1024791 10月 2 2018 nginx-1.15.5.tar.gz -rw-r--r-- 1 root root 794 6月 20 2020 nginx.conf -rw-r--r-- 1 root root 429 6月 20 2020 php.conf [root@cka-1 nginx]# cat Dockerfile (编译安装nginx) FROM centos:7 LABEL maintainer www.ctnrs.com RUN yum install -y gcc gcc-c++ make \ openssl-devel pcre-devel gd-devel \ iproute net-tools telnet wget curl && \ yum clean all && \ rm -rf /var/cache/yum/* ADD nginx-1.15.5.tar.gz / RUN cd nginx-1.15.5 && \ ./configure --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_stub_status_module && \ make -j 4 && make install && \ mkdir /usr/local/nginx/conf/vhost && \ cd / && rm -rf nginx* && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENV PATH $PATH:/usr/local/nginx/sbin COPY nginx.conf /usr/local/nginx/conf/nginx.conf WORKDIR /usr/local/nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] [root@cka-1 nginx]# docker build -t nginx:v2 . 启动容器 [root@cka-1 tomcat]# docker run -d --name web2 -p 90:80 -v /opt/www/cka/:/usr/share/nginx/html nginx:v2 访问http://192.168.137.136:90/ 发现是原始网页,原因编译安装容器根目录(/usr/local/nginx )不一样 再重新映射一下,再访问http://192.168.137.136:92 [root@cka-1 tomcat]# docker run -d --name web4 -p 92:80 -v /opt/www/cka/:/usr/local/nginx/html nginx:v2 |
安装tomcat [root@cka-1 nginx]# cd .. [root@cka-1 dockerfile]# cd tomcat/ [root@cka-1 tomcat]# ll 总用量 27336 -rw-r--r-- 1 root root 9717059 7月 5 2019 apache-tomcat-8.5.43.tar.gz -rw-r--r-- 1 root root 575 6月 20 2020 Dockerfile -rw-r--r-- 1 root root 18265402 6月 20 2020 ROOT.war [root@cka-1 tomcat]# cat Dockerfile FROM centos:7 MAINTAINER www.ctnrs.com ENV VERSION=8.5.43 RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \ yum clean all && \ rm -rf /var/cache/yum/* ADD apache-tomcat-${VERSION}.tar.gz /usr/local/ RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat && \ sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENV PATH $PATH:/usr/local/tomcat/bin WORKDIR /usr/local/tomcat EXPOSE 8080 CMD ["catalina.sh", "run"] [root@cka-1 tomcat]# docker build -t tomcat:cka . 启动容器tomcat,并暴露端口8081,服务端口为8080 [root@cka-1 tomcat]# docker run -d -p 8081:8080 tomcat:cka a367282298c942cea202a7edb1d2d703158c21e55d8d32fabf1d1bad298b6fd9 访问http://192.168.137.136:8081/ 进入tomcat容器并修改(记住路径:/usr/local/tomcat/webapps/ROOT) [root@cka-1 tomcat]# docker exec -it a367282298c942cea202a7edb1d2d703158c21e55d8d32fabf1d1bad298b6fd9 bash [root@a367282298c9 tomcat]# cd webapps/ROOT/ [root@a367282298c9 ROOT]# echo "<h1>welcome to sudy tomcat</h1>" > index.jsp 再访问http://192.168.137.136:8081/(jsp也能识别html,) 将宿主机页面替换容器界面 [root@cka-1 tomcat]# docker run -d -p 8082:8080 -v /opt/www/cka/:/usr/local/tomcat/webapps/ROOT tomcat:cka 7ec34368eaf4504fa43c48b5bb7a23eedb5855c43acfe6fb9cf06e05ca3f86af 再访问http://192.168.137.136:8082 |
Harbor概述 Harbor是由VMWare公司开源的容器镜像仓库。事实上,Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。 官方:https://goharbor.io/ Github:https://github.com/goharbor/harbor Harbor部署:先决条件 服务器硬件配置: 最低要求:CPU2核/内存4G/硬盘40GB 推荐:CPU4核/内存8G/硬盘160GB 软件: Docker CE 17.06版本+ Docker Compose 1.18版本+ Harbor安装有2种方式: 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小 离线安装:安装包包含部署的相关镜像,因此安装包比较大 |
Harbor部署 1、先安装Docker和Docker Compose https://github.com/docker/compose/releases 2、部署Harbor HTTP # tar zxvf harbor-offline-installer-v2.0.0.tgz # cd harbor # cp harbor.yml.tmpl harbor.yml # vi harbor.yml hostname: reg.ctnrs.com https: # 先注释https相关配置 harbor_admin_password: Harbor12345 # ./prepare # ./install.sh Harbor基本使用 1、配置http镜像仓库可信任 # vi /etc/docker/daemon.json {"insecure-registries":["reg.ctnrs.com"]} # systemctl restart docker 2、打标签 # docker tag centos:7 reg.ctnrs.com/library/centos:7 3、上传 # docker push reg.ctnrs.com/library/centos:7 4、下载 # docker pull reg.ctnrs.com/library/centos:7 |
这里为我实验的操作 移动docker-compose工具到/usr/bin [root@cka-1 ~]# mv docker-compose-Linux-x86_64 /usr/bin/docker-compose 给个执行权限(就能执行docker-compose 命令了) [root@cka-1 ~]# chmod +x /usr/bin/docker-compose 解压harbor [root@cka-1 ~]# tar zxvf harbor-offline-installer-v2.0.0.tgz [root@cka-1 ~]# cd harbor/ [root@cka-1 harbor]# ls common.sh harbor.v2.0.0.tar.gz harbor.yml.tmpl install.sh LICENSE prepare [root@cka-1 harbor]# cp harbor.yml.tmpl harbor.yml 设置成IP访问 [root@cka-1 harbor]# vim harbor.yml hostname: 192.168.137.136 #https: #port: 443 #certificate: /your/certificate/path #private_key: /your/private/key/path 初始化,下面这里安装需要一定时间,耐心等待 [root@cka-1 harbor]# ./prepare 导入镜像 [root@cka-1 harbor]# ./install.sh 查看当前服务启动的状态 访问http://192.168.137.136/,默认用户名admin,密码为Harbor12345 推送镜像,先给本地镜像重新命名 192.168.137.136/library为远程仓库的地址,可以在看下面截图出,重新打标记 [root@cka-1 harbor]# docker tag tomcat:cka 192.168.137.136/library/tomcat:v1 上传,这时需要配置http镜像仓库可信任 [root@cka-1 harbor]# docker push 192.168.137.136/library/tomcat:v1 The push refers to repository [192.168.137.136/library/tomcat] Get "https://192.168.137.136/v2/": dial tcp 192.168.137.136:443: connect: connection refused [root@cka-1 harbor]# ss -antp | grep 443 这里注意,我前面可能用到多个加速器,如果在这可能会导致重启docker失败,所有就使用下面两个就行 [root@cka-1 harbor]# vim /etc/docker/daemon.json(每个加速器后加逗号) { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "insecure-registries": ["192.168.137.136"] } [root@cka-1 harbor]# systemctl restart docker.service 查看是否配置成功 [root@cka-1 harbor]# docker info | grep -A2 "Registries" 刚刚因为我排错docker服务重启失败了,harbor挂了,所以我这里再重新启动 [root@cka-1 harbor]# docker-compose up -d (重新启动harbor) [root@cka-1 harbor]# docker-compose stop (为关闭所有的容器,介绍) 上传镜像前,我们需要先登录,再进行推送到harbor仓库 [root@cka-1 harbor]# docker login 192.168.137.136 [root@cka-1 harbor]# docker push 192.168.137.136/library/tomcat:v1 这时我们就可以看到上传的镜像仓库了 http://192.168.137.136/harbor/projects/1/repositories 这样就推送成功了 再push一个nginx到harbor仓库 [root@cka-1 harbor]# docker tag nginx:v2 192.168.137.136/library/nginx:cka [root@cka-1 harbor]# docker push 192.168.137.136/library/nginx:cka 拉取一个镜像,我这里再启动一台192.168.137.135,并配置加速器 [root@libin ~]# vim /etc/docker/daemon.json { "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"], "insecure-registries": ["192.168.137.136"] } [root@libin ~]# docker system prune -a(发现拉取不了,清理掉系统无用的镜像) 再尝试拉取,便成功了 [root@libin ~]# docker pull 192.168.137.136/library/nginx@sha256:dc0cf2c3fb1ab3afe5ebdfd4e854cda66458ecd9b5121cd38aa3007b4d99a102 直接使用推送的地址也能拉取 [root@libin ~]# docker pull 192.168.137.136/library/tomcat:v1 启动一个nginx的容器 [root@libin ~]# docker run -d -p 88:80 192.168.137.136/library/nginx:cka ec493f4bdc88c2c4f3f788b26d0f0b99b1d0fc023003b20fbf643d63f696bffb 编辑nginx网页 [root@libin ~]# docker exec -it mystifying_cori bashdock [root@ec493f4bdc88 nginx]# echo "<h1>welcome go to changsha</h1>" >html/index.html 到此,docker的入门学习结束。 |