关于docker:牛逼下一代-Docker-镜像构建神器

Docker通过读取Dockerfile中的指令主动构建镜像,Dockerfile是一个文本文件,其中顺次蕴含构建给定镜像所需的所有命令。 下面的解释摘自Docker的官网文档并总结了Dockerfile的用处。Dockerfile的应用十分重要,因为它是咱们的蓝图,是咱们增加到Docker镜像中的层的记录。 本文,咱们将学习如何利用BuildKit性能,这是Docker v18.09上引入的一组加强性能。集成BuildKit将为咱们提供更好的性能,存储管理和安全性。 先决条件Docker概念常识已装置Docker(以后应用v19.03)一个Java应用程序(在本文中,我应用了一个Jenkins Maven示例应用程序)让咱们开始吧! 简略的Dockerfile示例以下是一个蕴含Java应用程序的未优化Dockerfile的示例。咱们将逐渐进行一些优化。 FROM debianCOPY . /appRUN apt-get updateRUN apt-get -y install openjdk-11-jdk ssh emacsCMD [“java”, “-jar”, “/app/target/my-app-1.0-SNAPSHOT.jar”]在这里,咱们可能会问本人:构建须要多长时间?为了答复这个问题,让咱们在本地开发环境上创立该Dockerfile,并让Docker构建镜像。 # enter your Java app foldercd simple-java-maven-app-master# create a Dockerfilevim Dockerfile# write content, save and exitdocker pull debian:latest # pull the source imagetime docker build --no-cache -t docker-class . # overwrite previous layers# notice the build time0,21s user 0,23s system 0% cpu 1:55,17 total此时,咱们的构建须要1m55s。 如果咱们仅启用BuildKit而没有其余更改,会有什么不同吗? 启用BuildKitBuildKit能够通过两种办法启用: ...

May 25, 2021 · 3 min · jiezi

关于docker:docker

docker容器虚拟化平台1.什么是容器容器就是在隔离的环境运行的一个过程,如果过程进行,容器就会销毁.隔离的环境领有本人的系统文件,ip地址,主机名等系统文件:kvm虚拟机,linux,系统文件程序:代码,命令 过程:正在运行的程序,代码运行起来的时候就是一个过程 2.容器和虚拟化的区别Linux容器技术:.容器虚拟化和kvm虚拟化的区别kvm虚拟化:须要硬件的反对,须要模仿硬件,能够运行不同的操作系统,启动分钟级(开机启动流程)1)Linux开机启动流程bios开机自检依据bios设置的优先启动项u盘 boot 网卡 硬盘 光驱读取mbr疏导2T UEFI(gpt分区) mbr硬盘分区信息,内核加载门路加载内核启动第一个过程/sbin/init systemd零碎初始化实现运行服务…… 2)容器启动流程容器共用宿主机内核第一个过程,服务nginx,httpd,mysql 过程号为1容器:共用宿主机内核.容器的第一个过程间接运行服务,轻量级..损耗少,启动块,x性能高虚拟机:须要硬件反对,须要模仿硬件,须要走开机流程,能够运行不同的操作系统 3.容器技术的倒退历史1)chroot技术,新建一个子系统(领有本人残缺的系统文件)CHROOT就是Change Root,也就是扭转程序执行时所参考的根目录地位。CHROOT能够增进零碎的安全性,限度使用者能做的事。wget https://mirrors.tuna.tsinghua...chroot /opt/ 作业一:应用chroot监狱限度ssh用户拜访指定目录和应用指定命令 2)linux容器(lxc)linux container(namespaces 命名空间 隔离环境 及cgroups 资源限度)cgroups限度一个过程可能应用的资源cpu 内存 硬盘ionamespaces 资源隔离 kvm虚拟机资源限度(1c 1G 20G) 装置lxcyum install lxc-* -yyum install libcgroup* -yyum install bridge-utils.x86_64 -y 3)docker容器10.0.0.11 docker01 host解析10.0.0.12 docker02 host 解析Docker是通过过程虚拟化技术(namespaces及cgroups cpu、内存、磁盘io等)来提供容器的资源隔离与平安保障等.因为Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不须要相似虚拟机(vm)额定的操作系统开销,进步资源利用率namespace资源隔离cgroups 过程的资源限度kvm 虚构磁盘文件,资源隔离 qemu-img create test.raw 10Gkvm 资源限度,--cpus –memorydocker 初期把lxc二次开发,libcontainer docker 进行资源隔离的6种namespace docker最佳的运行环境是centos7 3.10 centos6 2.6docker在起初做了centos的docker 4)docker和lxc的关系在2013年Docker刚公布的时候,它是一款基于LXC的开源容器治理引擎。把LXC简单的容器创立与应用形式简化为Docker本人的一套命令体系。随着Docker的一直倒退,它开始有了更为远大的指标,那就是反向定义容器的实现规范,将底层实现都抽象化到Libcontainer的接口。这就意味着,底层容器的实现形式变成了一种可变的计划,无论是应用namespace、cgroups技术抑或是应用systemd等其余计划,只有实现了Libcontainer定义的一组接口,Docker都能够运行。这也为Docker实现全面的跨平台带来了可能。 (1)Docker并不是LXC的替代品,Docker的底层就是应用了LXC来实现的。LXC将Linux过程沙盒化,使得过程之间互相隔离,并且可能管制各过程的资源分配。(2)在LXC的根底之上,Docker提供了一系列更强的性能。 4.部署docker容器化平台4.1 yum源装置1)配置yum源yum install -y yum-utils device-mapper-persistent-data lvm2 #yum管理工具yum-config-manager --add-repo http://mirrors.aliyun.com/doc... #增加阿里源yum-config-manager --add-repo https://download.docker.com/l... #增加官网源2)列出docker-ce可装置的版本yum list docker-ce --showduplicates | sort -r yum install docker-ce-19.03.9-3.el7 #装置1903版本systemctl start docker #启动dockersystemctl enable docker #退出开机自启动 ...

May 24, 2021 · 4 min · jiezi

关于docker:docker-使用入门

docker 应用入门在公司应用微服务之后,因为各个服务之间有依赖关系,调试本人服务的时候每次都须要编译运行其余服务,原来应用一台开发机作为开发环境的形式就很麻烦,所以思考用 docker 部署一套能够复用的开发环境。首先理解下docker的根本应用。 装置点击链接下载 docker-desktop ,而后傻瓜式装置。 装置好之后能够在命令行执行 docker --version 命令,查看 docker 是否失常运行。 教程官网必定有教程的,所以能够去官网找一下,我这边看的是 docker/getting-started 的教程。docker/getting-started 自身就是一个 docker 的 repo。上面说一下怎么看这个教程。 在装置好 docker 之后,在命令行运行 docker run -d -p 80:80 docker/getting-started 命令, 而后就启动了一个容器。 而后本地浏览器拜访 http://localhost/tutorial/ 能够看到教程。英文的,然而很好了解,有点英语根底都能够看懂。本篇教程也是依照这个教程来的,记录下不便当前本人用。 接下来只讲应用,不讲原理。 应用创立第一个本人的APP教程提供了一个 Node.js 的利用让咱们间接应用,点击下载 Node.js APP , 本地的连贯,上述步骤没做下载不下来。 将下载的 zip 文件解压,用编辑器关上, 这边我用的是 vscode。 创立该APP镜像在下载的 APP 的跟目录下创立一个名称为 Dockerfile 的文件,文件内容如下:FROM node:12-alpineRUN apk add --no-cache python g++ makeWORKDIR /appCOPY . .RUN yarn install --productionCMD ["node", "src/index.js"]在 APP 跟目录下运行如下命令:docker build -t getting-started .-t 是给镜像取个名字,名字是 getting-started 。 最初的 . 代表的是运行的是当前目录下的 Dockerfile 文件。 ...

May 22, 2021 · 4 min · jiezi

关于docker:Docker-网络详解之使用自定义网络实现不同网络间的网络连通

# 应用默认的网络运行两个容器# docker run -d -P --name tomcat01 tomcat# docker run -d -P --name tomcat02 tomcat# 创立一个自定义网络# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet# 应用自定义网络运行两个容器# docker run -d -P --name tomcat-net-01 --net mynet tomcat# docker run -d -P --name tomcat-net-02 --net mynet tomcat# 失常状况下不同网络不能相互连贯# docker exec -it tomcat01 ping tomcat-net-01连贯两个不同网络# 将容器tomcat01连贯到mynet网络# docker network connect mynet tomcat01# 查看网络详情# docker network inspect mynet# 测试tomcat01的连通# docker exec -it tomcat01 ping tomcat-net-0164 bytes from tomcat-net-01:...# 测试tomcat02的连通# docker exec -it tomcat02 ping tomcat-net-01Name or service not known# 将容器tomcat02连贯到mynet网络# docker network connect mynet tomcat02# 测试tomcat02的连通# docker exec -it tomcat02 ping tomcat-net-0164 bytes from tomcat-net-01:...

May 21, 2021 · 1 min · jiezi

关于docker:Docker-网络详解之使用自定义网络实现容器间通过容器名称互联

Docker 的网络模式:bridge:桥接模式(默认)none:不配置网络host:和宿主机共享网络container:容器网络连通(很少用,局限大)Docker 自定义网络的应用# 查看所有的docker网络# docker network ls# 不写--net的状况下,默认为--net bridge,通过容器名不能拜访# docker run -d -P --name tomcat01 --net bridge tomcat# 创立一个自定义网络# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet# 查看所有的docker网络# docker network ls# 查看网络详情# docker network inspect mynet# 启动容器,指定应用自定义网络# docker run -d -P --name tomcat-net-01 --net mynet tomcat# docker run -d -P --name tomcat-net-02 --net mynet tomcat# 测试容器内网络连通# docker exec -it tomcat-net-01 ping 192.168.0.364 bytes from 192.168.0.3:...# 测试容器内网络连通# docker exec -it tomcat-net-01 ping tomcat-net-0264 bytes from tomcat-net-02:...

May 20, 2021 · 1 min · jiezi

关于docker:Docker-网络详解之使用-link-实现容器间通过容器名称互联

# docker run -d -P --name tomcat01 tomcat# docker run -d -P --name tomcat02 tomcat# docker ps# 默认不能通过容器名称相互连接# docker exec -it tomcat02 ping tomcat01ping: tomcat01: Name or service not known# 应用 --link 连贯两个容器(不举荐)# docker run -d -P --name tomcat03 --link tomcat02 tomcat# docker exec -it tomcat03 ping tomcat0264 bytes from tomcat02:...64 bytes from tomcat02:...# 但反向不能相互连接# docker exec -it tomcat02 ping tomcat03ping: tomcat03: Name or service not known# --link 的原理就是在hosts文件中配置了对方容器的映射# docker exec -it tomcat03 cat /etc/hosts127.18.0.3 tomcat02 tomcat02_image_id

May 20, 2021 · 1 min · jiezi

关于docker:Docker-网络详解之容器间通过IP互联

查看本机IP地址 # ip addr1: lo: 127.0.0.1/8 #本机回环地址2: eth0: 172.17.90.130/20 #阿里云内网地址3: docker0: 172.18.0.1/16 #Docker0地址,相当于路由器查看容器外部IP地址 # docker run -d -p 80:8080 --name tomcat01 tomcat# docker exec -it tomcat01 ip addr1: lo: 127.0.0.1 #本机回环地址261: eth0@if262: 172.18.0.2/16 #容器外部IP地址宿主机ping容器外部地址,能够连通 # ping 172.18.0.264 bytes from 172.18.0.2:...64 bytes from 172.18.0.2:...再次查看本机IP地址 # ip addr1: lo: 127.0.0.1/8 #本机回环地址2: eth0: 172.17.90.130/20 #阿里云内网地址3: docker0: 172.18.0.1/16 #Docker0地址,相当于路由器262: vethc96781f@if261: #对应容器的外部地址再启动一个容器,查看容器外部IP地址 # docker run -d -P --name tomcat02 tomcat# docker exec -it tomcat02 ip addr1: lo: 127.0.0.1 #本机回环地址263: eth0@if264: 172.18.0.3/16 #容器外部IP地址再次查看本机IP地址 ...

May 19, 2021 · 1 min · jiezi

关于docker:Docker日志控制

一、背景大部分人在应用docker过程中,仅是单纯地会装置,会应用,疏不知的是,如果在线上环境中未对docker进行参数调优配置,会给生产利用带来平安运行隐患。笔者近期尝试做应用Jenkins+K8s做DevOps(开发、运维自动化)流程利用时,就因为装置后没有对Docker进行日志大小调优,造成线上运行故障。二、问题Docker装置实现后,未设置控制台的日志大小限度,造成线上环境日志有限增长,主机磁盘故障。三、理论环境1、Docker版本root@k8s-node-prod-3:~# docker -vDocker version 20.10.6, build 370c2892、切换到/etc/docker目录root@k8s-node-prod-3:/# cd /etc/dockerroot@k8s-node-prod-3:/etc/docker# ls3、创立daemon.json文件,并保留root@k8s-node-prod-3:/etc/docker# view daemon.json { "log-driver":"json-file", "log-opts": {"max-size":"500m", "max-file":"3"}}4、重启dockersystemctl daemon-reloadsystemctl restartdocker.service

May 19, 2021 · 1 min · jiezi

关于docker:docker-配置本地-etcd-集群并使用-clientapiv3-管理集群

一、用 docker 搭建集群etcd 没有在 docker hub 中创立 image,所以天然拉取不到。 本文意在模仿应用步骤,所以创立三个 go 环境的容器,在每个容器中配置 etcd。 1 创立 go 容器hub 中有 golang 镜像,能够间接拉取: docker pull golang拉取到的镜像是基于 debian buster 制作。 创立三个容器: docker run -itd --name etcd1 golangdocker run -itd --name etcd2 golangdocker run -itd --name etcd3 golang2 在每个镜像中 clone etcddocker exec -it etcd1 bashdocker exec -it etcd2 bashdocker exec -it etcd3 bash在每个容器中克隆: git clone https://github.com/etcd-io/etcd.git3 编绎 etcd在每个容器中都须要执行上面的命令。 cd etcd./build.sh编绎脚本会拉取一些 golang 库,所以先设置好 goproxy 是十分有必要的。 go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct编绎实现后,会多一个 bin 目录,外面有两个可执行文件etcd和etcdctl,别离为服务端和客户端文件,搭建集群,应用的是etcd。 ...

May 19, 2021 · 8 min · jiezi

关于docker:Docker-将镜像推送到远程仓库

注册登录:https://registry.hub.docker.com/ # 登录docker login -u wuPassword:******# 给镜像打标签docker tag image_id wu/mydocker:1.0# 推送到近程仓库docker push wu/mydocker:1.0

May 17, 2021 · 1 min · jiezi

关于docker:Docker-使用-Dockerfile-制作-Tomcat-镜像

编写 Dockerfile 文件vim Dockerfile# 镜像应用的根底镜像FROM centos# 指明镜像的作者MAINTAINER wu<wuyuanhui@qq.com># 增加压缩包,会主动解压,需提前下载放到 Dockerfile 文件所在目录ADD jdk-8u11-linux-x64.tar.gz /usr/local/ADD apache-tomcat-9.0.22.tar.gz /usr/local/# 相似ADD指令,将文件拷贝到镜像中,需提前编写放到 Dockerfile 文件所在目录COPY readme.txt /usr/local/readme.txt# 镜像构建时须要运行的命令RUN yum -y install vimRUN yum -y install net-tools# 构建时设置环境变量ENV MYPATH /usr/local# 镜像的工作目录,启动容器后进入的目录WORKDIR $MYPATH# 设置 JAVA 环境变量ENV JAVA_HOME /usr/local/jdk1.8.0_11ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin# 指定对外的裸露端口EXPOSE 8080# 匿名挂载数据卷VOLUME ["volume01","volume02"]# 容器启动时须要运行的命令,多个CMD命令只有最初一个会失效# CMD中的命令会被docker run的命令齐全代替CMD echo $MYPATHCMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out# 构建镜像# -f 指定应用的Dockerfile文件,-t 指定生成镜像的版本,. 镜像放在当前目录docker build -t my_tomcat .# 查看所有镜像docker images# 运行容器,默认会去找最新版,所以须要指定版本docker run -d -p 8080:8080 --name my_tomcat01 \-v /home/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test \-v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.22/logs \my_tomcat# 进入容器docker exec -it my_tomcat01 /bin/bash# 查看镜像构建历史docker history image_id# 查看容器详情和数据卷挂载信息docker inspect my_centos01

May 17, 2021 · 1 min · jiezi

关于docker:Docker中MySQL主从复制

MySQL主从复制一、配置Master(主)[mysqld]## 同一局域网内留神要惟一server-id=100## 开启二进制日志性能,能够轻易取(要害)log-bin=mysql-bin 二、配置Slave(从)2.1这里我用了间接copy法,把里面文件夹曾经写好配置的 my.cnf 间接 copy 到 Slave 库中,不必从新下载Vim,没那么多内存[mysqld]## 设置server_id,留神要惟一server-id=101 ## 开启二进制日志性能,以备Slave作为其它Slave的Master时应用log-bin=mysql-slave-bin ## relay_log配置中继日志relay_log=edu-mysql-relay-bin 2.2在Master进入mysql,执行show master status; 2.3查看容器运行的各种数据,其中IPAddress就是容器IPdocker inspect 容器IDSlave的IP:Master的IP: ##这是一条错误代码change master to master_host='本人的IP', master_user='slave', master_password='本人的明码', master_port=端口, master_log_file='mysql-bin.000001', master_log_pos= 704, master_connect_retry=30;2.4查看主从同步状态。show slave status \G; Error:报错error connecting to master 'slave@本人的IP:端口' - retry-time: 30 retries: 16 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.查了具体起因:因为博客里博主的master库用的是slave用户名,而我的master库应用的是root,所以无奈正确链接到master库 2.5解决办法:先进行,而后从新批改用户名再重启即可Stop SLAVE IO_THREAD; change批改用户名rootchange master to master_host='本人的IP', master_user='root', master_password='明码', master_port=端口, master_log_file='mysql-bin.000001', master_log_pos= 704, master_connect_retry=30; ...

May 17, 2021 · 1 min · jiezi

关于docker:Docker-CMD-指令与-ENTRYPOINT-指令的使用与区别

CMD 指令应用测试cat DockerfileFROM centosCMD ["ls", "-a"]# 构建镜像docker build -f Dockerfile -t cmd-test .# 基于镜像运行容器docker run cmd-test....dockerenvbindevetchomelib......# 测试追加命令 ls -al,报错,不能追加docker run cmd-test -lError response from daemon...# 测试残缺命令 ls -al,胜利,并且替换了原有的CMD命令docker run cmd-test ls -alENTRYPOINT 指令应用测试cat DockerfileFROM centosENTRYPOINT ["ls", "-a"]# 构建镜像docker build -f Dockerfile -t entrypoint-test .# 基于镜像运行容器docker run entrypoint-test....dockerenvbindevetchomelib......# 测试追加命令 ls -a -l,胜利,间接拼接在了 ENTRYPOINT 命令之后docker run entrypoint-test -l

May 16, 2021 · 1 min · jiezi

关于docker:Docker-实践使用-Dockerfile-构建自己的-centos

Dockerfile 是用来构建 docker 镜像的形容文件。 每个指令必须都是大写字母;指令从上到下程序执行;应用 # 号作为正文;每个指令多会创立一个新的层并提交; 编写 Dockerfile 文件vim Dockerfile# 镜像应用的根底镜像FROM centos# 指明镜像的作者MAINTAINER wu<wuyuanhui@qq.com># 构建时设置环境变量ENV MYPATH /usr/local# 镜像的工作目录,启动容器后进入的目录WORKDIR $MYPATH# 镜像构建时须要运行的命令RUN yum -y install vimRUN yum -y install net-tools# 增加压缩包,会主动解压ADD apache-tomcat-xxx.tar.gz /usr/local/# 相似ADD指令,将文件拷贝到镜像中COPY readme.txt /usr/local/readme.txt# 指定对外的裸露端口EXPOSE 80# 匿名挂载数据卷VOLUME ["volume01","volume02"]# 容器启动时须要运行的命令,多个CMD命令只有最初一个会失效# CMD中的命令能够被docker run的命令齐全代替CMD echo $MYPATHCMD ["ls","-a"]# 容器启动时须要运行的命令,能够被用于追加命令# ENTRYPOINT ["ls","-a"]# 输入一行内容CMD echo "---END---"# 进入控制台CMD /bin/bash应用 Dockerfile 构建镜像# 构建镜像# -f 指定应用的Dockerfile文件,-t 指定生成镜像的版本,. 镜像放在当前目录docker build -f /home/Dockerfile -t my_centos:1.0 .# 查看所有镜像docker images# 运行容器,默认会去找最新版,所以须要指定版本docker run -it --name my_centos01 my_centos:1.0 /bin/bashpwdifconfigvim test.txt# 查看运行容器时主动挂载的数据卷 volume01, volume02ls -lexit# 查看镜像构建历史docker history image_id# 查看容器详情和数据卷挂载信息docker inspect my_centos01

May 16, 2021 · 1 min · jiezi

关于docker:CentOS中Docker的MySQL更改配置后重启不了的两种解决方式

我的项目要用到分库分表,而后本人手动更改了Docker中MySQL的配置文件my.cnf。配置结束之后应用Docker进行部署,运行docker restart mysql后没有胜利启动。问题排查,打印日志 docker logs mysql报错如下: [ERROR] [Entrypointl: mysqld failed while attempting to check config command was : mysqld --vervbose --help[ERROR] Found option without preceding group in config file /etc/mysql/ my cnf at line 27 mysql Fatal error in defaults handling. Program aborted[ERROR] [Entrypoint]: mysqld failed while attempting to check config command was mysqld --verbose --help mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 27!mysqld: [ERRORI Fatal error in defaults handling. Program aborted!随后我打算执行 ...

May 16, 2021 · 1 min · jiezi

关于docker:Docker-挂载数据卷的三种方式

指定门路挂载数据卷# -v 主机目录:容器目录docker run -d -P -v /usr/local/nginx/has-name-nginx:/etc/nginx --name nginx01 nginx匿名挂载数据卷(不倡议)docker run -d -P -v /etc/nginx --name nginx01 nginx具名挂载数据卷# 具名挂载数据卷docker run -d -P -v has-name-nginx:/etc/nginx --name nginx01 nginx# 查看某个具名挂载卷的详细信息docker volume inspect has-name-nginx[ { "Mountpoint": "/var/lib/docker/volumes/has-name-nginx/_data" }]查看数据卷# 查看容器详细信息docker inspect 容器ID数据卷读写权限# ro即readonly,容器对该门路只读,宿主机可读写-v 容器内门路:ro# rw即readwrite,容器对该门路可读可写(默认)-v 容器内门路:rw

May 16, 2021 · 1 min · jiezi

关于docker:使用-Docker-运行-MySQL-容器

运行 docker search mysqldocker pull mysql:5.7docker images# 挂载容器内的目录到主机中的指定目录docker run -d \-p 3310:3306 \-v /home/mysql/conf:/etc/mysql/conf.d \-v /home/mysql/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \--name mysql01 \mysql:5.7 \--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci测试 # 连贯容器的MySQL$ docker run -it --rm mysql:5.7 mysql -hmysql01 -uexample-user -p# 进入容器$ docker exec -it mysql01 bash# 查看容器日志$ docker logs mysql01查看所有可用的选项列表: $ docker run -it --rm mysql:5.7 --verbose --help应用文件加载环境变量$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:5.7仅反对MYSQL_ROOT_PASSWORD,MYSQL_ROOT_HOST,MYSQL_DATABASE,MYSQL_USER,和MYSQL_PASSWORD。 以指定用户身份运行容器$ mkdir data$ ls -lnd datadrwxr-xr-x 2 1000 1000 4096 Aug 27 15:54 data$ docker run -v "$PWD/data":/var/lib/mysql --user 1000:1000 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7备份数据库$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql还原数据库$ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql参考:https://registry.hub.docker.c... ...

May 15, 2021 · 1 min · jiezi

关于docker:Docker-使用-commit-提交镜像

提交镜像# 将操作过的容器提交为一个新的镜像docker commit -m="提交的形容信息" -a="镜像作者" container_id image_name:TAG示例# 制作镜像docker run -d -p 3355:8080 --name tomcat01 tomcatdocker exec -it tomcat01 /bin/bashcd /usr/local/tomcat/cp -r webapps.dist/* webapps/exit# 提交镜像docker commit -m="init tomcat image" -a="wu" 7be8ie9b7we9 tomcat02:1.0docker images

May 15, 2021 · 1 min · jiezi

关于docker:从零开始的k8s之旅三一分钟了解容器

Linux容器容器的外围概念是Namespace和Cgroup,在最早的容器概念中蕴含了对文件目录视图的形象隔离,所有这所有都须要有工具来驱动,来提供一个可供用户操作的接口,以此来创立一个容器。所以容器的最小组成可由此公式表白:容器=cgroup+namespace+rootfs+容器引擎(用户态工具) 其中各项的性能别离为: Cgroup:资源管制。Namespace:拜访隔离。rootfs:文件系统隔离。容器引擎:生命周期管制。 目前业界简直所有Linux容器我的项目都蕴含以上组件。 Docker容器只管容器技术曾经呈现了很久,却是随着Docker容器的呈现才变得广为人知,作为第一个使容器能在不同平台移植的零碎,它实至名归。Docker简化了打包利用的流程,也简化了打包利用的库和依赖,打镜像、推送仓库,拉取镜像运行容器,部署利用从未变得如此顺滑。 OCI标准Docker胜利之后,联结其余容器行业领导者成立了凋谢容器标准OCI,围绕容器格局和运行时创立了凋谢工业规范。核心内容是:OCI Runtime Spec(容器运行时标准)、 OCI Image Spec(镜像格局标准)、 OCI Distribution Spec(镜像散发标准),OCI组织要解决的是容器额构建、散发和运行的问题。 因为某些未知的起因,自Kubernetes 1.20 之后将弃用 Docker 作为容器运行时,“弃用 Docker”这个词自身有多重的含意,Docker 并非一个单层软件,Kubernetes 1.20 启用 dockershim 并不代表弃用了 Docker 的全副,仍有 containerd 以及开源的cri-o能够对接 docker。

May 13, 2021 · 1 min · jiezi

关于docker:Wekan-安装指南

Wekan 装置指南在 Linux 上应用 Docker 装置在你的计算机上找到一个适合的地位如 /usr/local/ ,执行命令。 git clone https://github.com/wekan/wekan国内能够应用 Gitee 的镜像减速: git clone https://gitee.com/mirrors/wekan.git上面将应用 Docker Compose 来构建预编译的 Wekan Container. Docker Compose 是一个用于定义和运行多容器 Docker 的应用程序工具,执行如下命令查看是否已装置。 docker-compose -version正确装置会显示版本号。 否则顺次执行如下命令。此处参考 Docker Docs . # 确保具备 root 权限,否则执行 sudo curlcurl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 提权sudo chmod +x /usr/local/bin/docker-compose# 配置软链接sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# 查看装置状况docker-compose -version装置实现后,咱们批改一下 wekan 的 docker-compose.yml 配置文件,其目标在于自定义拜访端口,能够按需替换镜像源,解决下载速度过慢的问题,甚至本人编译,而不是用官网的预编译容器。 进入文件夹并编辑配置文件。 cd wekanvim docker-compose.yml补充下 vim 的根底应用,前面会用到这些命令。 # 显示行号:set nu# 跳转到第 i 行:i# 匹配字符串 str:/str首先批改端口号及拜访的 URL。 ...

May 12, 2021 · 2 min · jiezi

关于docker:Docker-Linux-没有vim怎么编辑文件

类似发问:Docker centos 没有vim怎么编辑文件?Docker centos 没有vi怎么编辑文件?Docker ubuntu 没有vim怎么编辑文件?Docker ubuntu 没有vi怎么编辑文件?上面的内容统统通知你答案!!!! 为什么会有这个问题呢?很简略,因为有中国有互联网长城,所以须要换源(你懂的) 解决方案没有vim,就要装置vim怎么装置呢?当然是执行上面语句 apt updateapt install vim从Docker下载的镜像默认登录用户就是root,所以不须要加sudo,如果你不是这种状况,那就加上sudo然而很慢啊,因为默认是ubuntu官网的源,速度感人 这个速度很迷,有的网络下能够有好几兆,那够用,有的网络下就只有几十KB,你懂的deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse这是一个规范的阿里云 ...

May 9, 2021 · 1 min · jiezi

关于docker:Haobor221配置trivy扫描器镜像签名

Haobor2.2.1配置(trivy扫描器、镜像签名)docker-compose下载https://github.com/docker/compose/releases装置cp docker-compose /usr/local/binchmod +x /usr/local/bin/docker-composeharbor下载https://github.com/goharbor/harbor/releases解压tar xf xxx.tgx配置harbor根下建设:mkdir /datacd harbor/mkdir certscd certs/生成证书及私钥 openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout registry.key -out registry.crtcd ..cp -r certs/ /编辑配置文件 mv harbor.yml.temp harbor.ymlhostname:example.com certificate: ./certs/registry.crt private_key: ./certs/registry.key harbor_admin_password:Abcd12345配置检测./prepare装置有扫描–with-trivy ,有认证–with-notary,有helm charts 模块退出–with-chartmuseum 其中–with-clair已弃用有扫描–with-trivy ,有认证–with-notary,有helm charts 模块退出–with-chartmuseum ./install.sh --with-notary --with-trivy --with-chartmuseum配置hostnamevim /etc/hosts最初退出:127.0.0.1 example.com浏览器拜访https://example.com或者:IP:80用户名:admin明码:Abcd12345命令行登陆docker login example.comUsername:adminPassword:Abcd12345操作命令敞开 docker-compose down重新部署执行后会删除配置,我的项目数据并不会删除 ./prepare启动 docker-compose up -dTrivy 是一种实用于 CI 的简略而全面的容器破绽扫描程序。软件破绽是指软件或操作系统中存在的故障、缺点或弱点。Trivy 检测操作系统包(Alpine、RHEL、CentOS等)和应用程序依赖(Bundler、Composer、npm、yarn等)的破绽。 Trivy 很容易应用,只有装置二进制文件,就能够扫描了。扫描只需指定容器的镜像名称。与其余镜像扫描工具相比,例如 Clair,Anchore Engine,Quay 相比,Trivy 在准确性、方便性和对 CI 的反对等方面都有着显著的劣势。 ...

May 8, 2021 · 3 min · jiezi

关于docker:创建最小化的容器镜像三

引言这是无关如何制作最小化Docker镜像系列文章中的第三篇。 在第一篇文章中,我谈到了如何通过编写更好的Dockerfiles创立较小的镜像,在第二篇文章中,我探讨了如何应用docker-squash压缩镜像层以制作更小的镜像。 这些办法的确很不赖,然而如果咱们抉择的根底镜像很大的话,之前两篇中介绍的办法将杯水车薪。 让咱们看第二篇文章中的例子,Docker Hub上的规范python镜像,如果查看Dockerfile会发现它的根底镜像是Debian jessie。 FROM buildpack-deps:jessie# ensure local python is preferred over distribution pythonENV PATH /usr/local/bin:$PATH...buildpack-deps:jessie镜像蕴含残缺的Debian jessie发行版,很大。 ~$ docker images buildpack-deps:jessieREPOSITORY TAG IMAGE ID CREATED SIZEbuildpack-deps jessie 3b84923989a0 3 weeks ago 614 MB能够看到占用了614MB的空间,即便压缩它也杯水车薪,因为在根底Distribution中含有大量数据。 Alpine LinuxAlpine Linux是Linux的发行版之一,对于根底装置而言,该发行版十分小。 然而,即便它很小,它依然具备一个不错的软件包存储库,其中蕴含许多软件包。 它还有相似于apt-get或yum的工具,可轻松装置这些软件包。 ~$ docker images alpine:3.6REPOSITORY TAG IMAGE ID CREATED SIZEalpine 3.6 a41a7446062d 5 days ago 3.966 MB仅仅只有3.96 MB,与614MB的Debian jessie镜像相比,这是一个微小的劣势。 许多规范Docker映像都很不便地提供了Alpine Linux版本,通常,它具备-alpine后缀。 来看一个python的例子。 ~$ docker images python:2.7.13-alpineREPOSITORY TAG IMAGE ID CREATED SIZEpython 2.7.13-alpine 3dd614730c9c 4 days ago 72.02 MBPython VM占用了约72MB的内存,远小于Debian python镜像的670MB。 ...

May 8, 2021 · 1 min · jiezi

关于docker:创建最小化的容器镜像二

引言这是无关如何制作最小化Docker镜像的第二篇文章,在之前的文章中,我谈到了如何创立最小化的Docker镜像,然而能够制作镜像的大小其实是有限度的,我概述了一种使增加到Docker镜像中的layer层变小的办法,但有时可能无奈做到,兴许须要依照特定的程序运行一些额定的步骤。比方上面这个例子,须要在两头的步骤中增加一个文件: RUN ...ADD some_file /RUN ...如果我须要在增加文件之前在第一个RUN命令中进行一些解决,而后在第二个RUN命令中进行一些清理之前进行更多解决,该怎么办? 在这种状况下,很不背运的是,Docker将在每个命令之后创立一个layer层,而且可能还会遇到以下辣手的状况:要应用的根底镜像继承自许多其余镜像,并且每个镜像都增加了本人很大的layer层。 Docker SquashDocker没有提供一种将运行的命令与layer层缓存拆散的办法,实践上这能够做到,但这会导致镜像过大。 为了缩小层的数量及其大小,能够像压缩git commit一样压缩layer层。 有一个十分酷的工具称为docker-squash能够执行此操作, 您能够在作者的原始文章中理解无关此内容的更多信息。 Docker squash将压缩多个镜像layer层,以便删除存储在两头步骤中的所有数据,当遇到上述情况时,这真的很棒,或者说如果你想让Dockerfile变得不那么简单,就去试一试吧。 Squashing Python我想看看是否能够放大docker hub上的规范python:2.7.11图像,从Dockerfile中留神到,首先要革除以后装置的Debian python,而后再下载并编译本人的版本。 然而,因为Debian python已蕴含在较早的一层中,因而该空间已被咱们的镜像占用,这些镜像还取决于其余几个Dockerfile,每个Dockerfile都增加了本人的层。 让咱们看看通过squashing能够节俭多少空间。 首先将python:2.7.11的镜像pull到本地 $ docker pull python:2.7.112.7.11: Pulling from library/python7a01cc5f27b1: Pull complete 3842411e5c4c: Pull complete ...127e6c8b9452: Pull complete 88690041a8a3: Pull complete Digest: sha256:590ee32a8cab49d2e7aaa92513e40a61abc46a81e5fdce678ea74e6d26e574b9Status: Downloaded newer image for python:2.7.11能够看到该镜像具备很多层,大小约为676MB。 $ docker images python:2.7.11REPOSITORY TAG IMAGE ID CREATEDVIRTUAL SIZEpython 2.7.11 88690041a8a3 2 weeks ago676.1 MBdocker-squash不容许压缩本地镜像仓库中的镜像,这点令人讨厌。 相同,它要求将镜像导出为文件,接下来持续操作,并创立一个新的squashed镜像。 $ docker save python:2.7.11 > python-2.7.11.tar$ sudo bin/docker-squash -i python-2.7.11.tar -o python-squashed-2.7.11.tar当初能够看到新文件放大了约75MB。 ...

May 8, 2021 · 1 min · jiezi

关于docker:在Docker环境下TDengine的客户端为什么连不上集群

作者|陈玉 最近,在TDengine的一个社区群中突发了一场重大的灌水事件。几位群友不眠不休地聊天,能够说是废寝忘食。那么到底是什么话题能让他们凌晨四点还在忘我地探讨? 这个话题就是——如何欠缺Docker环境下TDengine的集群搭建。“什么?除了你们官网本人人之外,怎么会有用户加班加点地探讨如何欠缺Docker环境的集群搭建,这也太假了。” 好吧,咱们抵赖:其实是有一个叫Oliver(群昵称)的用户遇到了这样的问题——辛辛苦苦搭起来Docker环境下的TDengine集群在客户端连不上了。接下来,就引发了群里的二位热心大佬的探讨不休,直到想出最初的解决方案。 事件的通过是这样的: 该用户的数据库集群装在这台Linux服务器上(ip:10.0.31.2),容器ip所在的网络是由Docker在宿主机创立的虚构网络172.19.0.0/16。三个容器的hostname和节点ip别离:taosnode1(172.19.0.41)、taosnode2(172.19.0.42)、taosnode3(172.19.0.43)。 各个节点配置如下: taosnode1: firstEp=taosnode1:6030,secondEp=taosnode2:6030,fqdn=taosnode1;端口映射:16030-16042:6030-6042(tcp/udp)taosnode2: firstEp=taosnode1:6030,secondEp=taosnode2:6030,fqdn=taosnode2;端口映射:26030-26042:6030-6042(tcp/udp)taosnode3: firstEp=taosnode1:6030,secondEp=taosnode2:6030,fqdn=taosnode3;端口映射:36030-36042:6030-6042(tcp/udp)依照官网文档的批示致力折腾一番后,Oliver终于搭起了这个集群。增加完节点之后,他忐忑地敲下了“show dnodes”,随着三个READY映入眼帘后———舒坦了。 服务端没有问题,接下来该客户端了。他关上了本人的一台ip为10.0.31.5(与集群宿主机同一网段)的Windows主机,迅速地在下面装置了个TDengine客户端,增加hosts信息,做好路由,2.8MB,傻瓜式装置,轻松便捷,连贯集群零打碎敲。“show dnodes”随着三个READY再次映入眼帘后———又舒坦了。 Oliver十分满意,然而,他马上发现事件可能并不像设想中的那么简略。 因为业务须要,他还须要实现客户端(10.0.2.61)跨网段连贯服务端集群(基于ip:10.0.31.2的Docker环境下的集群)。ping得通宿主机,telnet得通集群映射进去的端口,应用taos连贯集群,一样的操作也和此前一样顺利。于是他再次敲下“show dnodes”——万万没想到,这时令所有TDengine用户都疾恶如仇的“DB error:Unable to establish connection”呈现了。于是,他便在群中抛出了本人的问题。 上文说到的两位热心的同学就是在这个时候呈现的。一位是TDengine的内部Contributor——Freemine。另一位是路见问题拔刀相助的热心大佬pigwing。 因为集群自身没有任何应用问题,惟一的区别就是客户端连贯服务器的形式变成了跨网段。所以,一开始大家的思路就是——既然走宿主机的端口不行,那就试试间接连到Docker环境下的ip吧。遗憾的是,跨网段连贯Docker环境下外部ip的想法没能实现。 接着大家揣测:TDengine靠的是EndPoint(EP)来辨认数据节点,而EP=FQDN+端口。可客户端连贯曾经胜利,只是无奈对数据操作,在FQDN无误的状况下,大家猜想是集群内的端口呈现了问题,从而没拿到集群的拓扑信息。接下来,从最后的理解环境,到一步一步的排查问题,三个持之以恒的工程师在群里从4月22日探讨到4月25,最晚的时候凌晨4点多都有人在线。 终于,在三人的通力合作屡次试错下,4月24日凌晨1点——freemine提出了一个卓有成效的最终解决方案(文字过多只截图要害局部) 功败垂成,通过测试后,一切顺利! 那么,freemine的集群搭建计划和最后的集群搭建有什么区别呢? 尽管过程波折,然而最初咱们认真比照一下两者的计划就会发现,它们的区别就只有在端口配置这一块不一样。freemine的计划是在每一个单机的serverport都批改了不一样的值。taosnode1节点的serverport为6030—映射主机的6030端口;taosnode2节点的serverport为7030–映射主机的7030端口;taosnode3节点的serverport为8030–映射主机的8030端口。 而提问者Oliver最后的各个节点的serverport都是没做批改的默认6030,映射到宿主机的时候是16030,26030,36030。就是这样的配置在客户端与集群宿主机的同网段连贯时并没有产生问题,而是在跨网段连贯时呈现问题。 看起来一丝小小的改变竟然有这么大的区别?Why? 其实是这样,当客户端与服务端同属一个网段的时候,在增加路由后,客户端是能够间接拜访到Docker外部的。这样一来,IP地址就能够依据须要被正确地解析进去。如:taosnode1(172.19.0.41)、taosnode2(172.19.0.42)、taosnode3(172.19.0.43)。在不同的IP地址下,即使端口都是一样的6030,TDengine还是能够实现不同节点的辨别。 然而,当跨网段之后就不一样了。对于不同网段的客户端和服务端而言,客户端要通过实在路由去连贯服务端,但实在路由中并没有注册咱们设置的Docker外部网络,所以客户端天然就拜访不了Docker外部的网络。因而,当taosc须要失去集群提供的不同节点的信息时,FQDN曾经无奈正确解析IP地址了。这时候,就须要通过端口来实现不同节点的辨别。 这就是不能再在Docker环境下的节点中同时应用6030端口的起因。 因而,当你应用了Docker主机内外统一的端口映射,且每个节点的serverPort参数不雷同的设置时,集群就能够通过不同的端口来辨别不同的节点。这样一来,客户端才能够拿到拓扑信息进行集群的顺利操作。 这就是整个“案件”的最终答案。 总结一下,对于用户应用而言,Docker环境下搭建TDengine集群的水还是颇深。因为环境的绝对简单,所以咱们也并不是非常举荐大家应用这种形式搭建集群。所以,对于TDengine在Docker环境的应用,大家还是要小心谨慎。 最初咱们想说的是,作为一个开源的产品,社区的沉闷与业余是咱们涛思数据最为关注的中央。尽管目前官网上并没有对于Docker环境下TDengine集群搭建的文档。然而这些社区用户们的沉闷思考显然很大水平填补了这样的一个空白。 真心感激Oliver,freemine,pigwing三位敌人。非常心愿日后能够持续看到你们在物联网大数据技术前沿群中的沉闷身影,同时咱们也心愿有更多的敌人们可能参加进来。 点击“这里”,查看Oliver整顿的TDengine在Docker环境下的集群搭建笔记。

May 8, 2021 · 1 min · jiezi

关于docker:创建最小化的容器镜像

引言最近的工作中,我应用了很多种容器技术,其中最风行的技术当然是Docker。 除了容许你应用docker run命令轻松运行容器外,Docker还提供了一种构建容器镜像的办法以及生成的镜像的格局。 通过编写Dockerfile并执行docker build命令,能够轻松地创立在装置了Docker的任何地位(在肯定约束条件下)运行的镜像。 比方,这是一个用于运行简略文件服务器的DockerFile。 FROM debian:jessieRUN apt-get updateRUN apt-get install -y pythonRUN mkdir -p /dataVOLUME ["/data"]WORKDIR /dataEXPOSE 8000CMD [ "python", "-m", "SimpleHTTPServer", "8000" ]是一个非常简单的docker文件,然而如果你构建它并查看理论大小,你会发现它其实很大。 VIRTUAL SIZE167.4 MB为什么镜像看起来如此之大?在下面的Dockerfile的第一行,留神到下面写的是FROM debian:jessie,这点很重要,因为这意味着咱们将Docker镜像基于Docker Hub上的debian:jessie镜像。 之所以会如此之大,是因为该镜像蕴含了整个Debian 8.x装置,如果在这之后再装置gcc,g++或其余构建工具之类的货色,镜像将变得更大。 好的,让咱们看一下如何为Redis创立Docker镜像,Dockerfile非常简单,下载redis源码进行编译装置,而后删除所有用于构建它的工具,因为不须要运行它们。 FROM debian:jessieRUN apt-get updateRUN apt-get install -y gcc libc6-dev makeRUN curl -sSL "http://download.redis.io/releases/redis-3.0.5.tar.gz" -oredis.tar.gzRUN mkdir -p /usr/src/redisRUN tar -xzf redis.tar.gz -C /usr/src/redisRUN make -C /usr/src/redisRUN make -C /usr/src/redis install# 全副删除RUN rm -f redis.tar.gzRUN rm -f /usr/src/redisRUN apt-get purge -y --auto-remove gcc libc6-dev make...Docker应用层layer创立镜像,Dockerfile中每一个命令都会创立一个新的层,每层都蕴含执行命令前后的状态之间镜像的文件系统更改。在下面的例子中即便咱们在最初删除了构建工具,它们仍蕴含在Docker须要构建以后层的上一层中,因而,咱们为放大镜像所做的所有工作都没有任何成果! ...

May 8, 2021 · 1 min · jiezi

关于docker:Docker简要介绍

Docker罕用形式简介什么是DockerDocker是一个开源的利用容器引擎,开发者能够打包本人的利用到容器外面,而后迁徙到其余机器的docker利用中,能够实现疾速部署。如果呈现的故障,能够通过镜像,疾速复原服务。一、Docker三大因素 仓库(Registry):国内次要是阿里云仓库,寄存各种所需的公共镜像。镜像(Images):相似于常见软件的模板,简易版Linux环境+运行于其中的软件,从仓库拉取,存于本地。容器(Contains): 镜像的实例,一个镜像可创立多个实例。 二、Docker常用命令帮忙命令 docker version #查看版本信息docker info #查看docker的相干信息 client及serverdocker --help #帮忙命令镜像命令 docker images [options] #列出本地(server)中的所有镜像 -a 列出本地所有镜像(含两头映像层) -q 只显示镜像ID --digist 显示摘要信息 --no-trunc 显示残缺信息docker search [options] 镜像名 #在仓库中查找镜像 --no-trunc 显示残缺信息 -s n 显示珍藏数不小于n的镜像 --automated 只显示automated类型docker pull 镜像名 #从仓库拉取镜像到本地docker rmi -f 镜像名($(docker images -qa)) #强制删除本地镜像(所有) 容器命令 docker run [options] 镜像名 #创立镜像实例容器并运行 -it 以交互方式,伪终端启动 --name 别名 -d 后盾运行容器并返回容器ID -P/p 随机端口映射/指定端口映射docker ps [options] #查看所有容器 -a 以后正在运行+历史运行过 -l 显示最近创立的容器 -n 显示最近创立的n个容器 -q 只显示容器编号 --no-trunc 查看残缺信息exit #容器进行退出容器ctrl+P+Q #容器不进行退出容器docker start/restart/stop/kill 容器名 #启动/重启/进行/强制进行容器docker rm -f ($(docker ps -qa)) #删除容器(删除所有)docker run -d 容器名 #以守护过程形式启动docker logs [options] 容器名 #查看容器运行日志 -t 退出工夫戳 -f 跟踪最新的日志 --tail n 显示最初n条docker top 容器名 #查看容器内运行的过程docker inspect 容器名 #查看容器外部运行的细节docker cp 容器ID:门路 主机门路 #拷贝容器文件到主机docker attach 容器名 #从新进入未进行(ctrl+P+Q)的容器docker exec -it 容器名 相应操作 在容器内部执行外部命令 /bin/bash 进入容器同attach三、镜像原理1.底层为联结文件系统 UnionFS2.镜像加载原理 bootsfs(内核,与主机共用不加载)+rootfs(软件文件系统)3.镜像提交 docker commit -m="形容" -a="作者" 容器名 创立的指标镜像名:版本4.镜像推送 docker push 可推送到仓库,供大家应用5.分层镜像四、Docker容器数据卷卷,就是目录或文件,存在于一个或多个容器中,由docker挂载到容器中,但不属于联结文件系统,因而可能绕过Union File System提供一些用于继续存储或共享数据的个性。 ...

May 4, 2021 · 1 min · jiezi

关于docker:跳过更新竟然得付费Docker-新功能引争议

「跳过更新」是一个很常见的选项,而 Docker Desktop 3.3 版本将其设置为付费性能,此举引发了大量争议。 5 月 2 日,纽约大学工学院助理传授 Brendan Dolan-Gavitt 在推特上吐槽,Docker 新版本将「跳过更新」设置为付费性能,成为 Pro 用户能力应用。 据 Docker 博客显示,该性能呈现在 Docker Desktop 3.3 之后,旨在为 Pro 或 Team 用户提供对于更新的更多灵活性。即此类付费用户能够跳过更新揭示,而收费用户则只能临时敞开该揭示,之后仍将一直收到弹窗揭示,除非成为 Pro 或 Team 用户。 在 Brendan 这条推特下,有人评论道,这是个恐怖的趋势,Docker 此举十分蹩脚。 该事件在被转发到 reddit 后,也引发了大量吐槽。有网友示意: 这十分恐怖。Docker 更新一贯毁坏现有的性能。它的用户使用率如此之高,但品质管制远远低于预期。 不过,也有人认为这是明智之举。有网友认为此举可促使从开源中获益的大公司做出回馈,帮忙保护继续开发。 也有用户示意,该性能能够促使大家及时更新并应用最新性能,「再也不必放心共事不装置更新了!」 关于软件容器平台 Docker凋谢源代码软件 Docker,是一个用于开发、交付(shipping)和运行利用的开放平台。Docker 容许用户将基础设施(Infrastructure)中的利用独自宰割进去,造成更小的颗粒(容器),从而进步交付软件的速度。 2013 年 3 月,Docker 由 PaaS 提供商 dotCloud(后更名为 Docker)以开源模式公布,代码托管在 GitHub 上,受到开源社区的宽泛承受。 Docker 提供简略实用的用户接口,是目前最风行的 linux 容器解决方案。因其便捷性和高效性等诸多劣势,Docker 也成为开发者罕用的工具之一。 这也意味着,Docker Desktop 3.3 版本中的付费「跳过更新」性能会影响到许多人。 ...

May 4, 2021 · 1 min · jiezi

关于docker:卧槽Docker-将-跳过更新-设为付费功能引发网友吐槽

5 月 3 日音讯, 最近,纽约大学工学院助理传授 Brendan Dolan-Gavitt 在推特上发帖,吐槽 Docker 最新的降级性能,官网将“跳过更新”设为付费性能,收费用户只能临时敞开该揭示。 依据 Docker 官网博客,这是在 Docker 3.3 版本之后才推出的更新策略,旨在为具备 Pro 或 Team 订阅的开发者提供更多的灵活性。 目前该帖被转到 Reddit ,引发了一系列热议。有网友示意,尽管大部分人都放弃软件在最新版本,但也有一部分用户为了稳固并不想进行更新,而 Docker 的这一做法就是在强制更新。 民工哥也认为这种作法实为不妥,对于软件的更新与否,决定权应该把握在用户手中,而不是软件提供方。 有很大一部分网友示意:这真是一个骚操作,Docker 学坏了。。 在看的你,对于Docker的这一骚操作,你怎么看?? 欢送留言参加探讨。 起源:https://www.sohu.com/a/464401...

May 4, 2021 · 1 min · jiezi

关于docker:如何在docker容器中安装一些常用工具

一、概述当应用 docker 创立一个容器后,进入到容器外部,发现很多罕用的工具命令不存在,比方我想要应用 ping 命令测试一下网络的是否畅通,发现容器中找不到这个命令,如下所示: root@kuboard-5967d77d89-h2hgn:/# ping www.baidu.combash: ping: command not found因为容器能够简略的当做一个十分精简的操作系统,所以咱们须要本人装置咱们须要的工具,这篇文章简略记录一下装置一些常用工具的过程以及遇到的问题,心愿能对有须要的小伙伴提供一些帮忙。 应用上面的命令查看正在运行容器的 id: docker ps应用上面的命令进入到 docker 容器中: docker exec -it 容器id bash二、在 docker 容器中装置常用工具进入容器之后,首先查看一下容器是基于 linux 的哪一个发行版本构建的,能够应用上面的命令进行判断。基于 Debian 构建的镜像输入如下: root@kuboard-5967d77d89-h2hgn:/# cat /etc/issueDebian GNU/Linux 10 \n \l基于 Centos 构建的镜像输入如下: [root@bd3c8187d8c8 /]# cat /etc/issue\SKernel \r on an \m进入容器后,还能够间接输出 apt 或者 yum 进行判断1、基于 Debian 的容器如果容器是应用 Debian 构建的,容器中能够应用 apt 命令来装置软件,间接输出 apt 并回车,能够查看 apt 的帮忙阐明,如下所示: root@kuboard-5967d77d89-h2hgn:/# aptapt 1.4.9 (amd64)Usage: apt [options] commandapt is a commandline package manager and provides commands forsearching and managing as well as querying information about packages.It provides the same functionality as the specialized APT tools,like apt-get and apt-cache, but enables options more suitable forinteractive use by default.Most used commands: list - list packages based on package names search - search in package descriptions show - show package details install - install packages remove - remove packages autoremove - Remove automatically all unused packages update - update list of available packages upgrade - upgrade the system by installing/upgrading packages full-upgrade - upgrade the system by removing/installing/upgrading packages edit-sources - edit the source information fileSee apt(8) for more information about the available commands.Configuration options and syntax is detailed in apt.conf(5).Information about how to configure sources can be found in sources.list(5).Package and version choices can be expressed via apt_preferences(5).Security details are available in apt-secure(8). This APT has Super Cow Powers.能够应用上面的命令更新可用安装包列表: ...

April 29, 2021 · 4 min · jiezi

关于docker:图解-Docker-架构

Docker的总架构图 docker是一个C/S模式的架构,后端是一个松耦合架构,模块各司其职。 用户是应用Docker Client与Docker Daemon建设通信,并发送申请给后者。Docker Daemon作为Docker架构中的主体局部,首先提供Server的性能使其能够承受Docker Client的申请;Engine执行Docker外部的一系列工作,每一项工作都是以一个Job的模式的存在。Job的运行过程中,当须要容器镜像时,则从Docker Registry中下载镜像,并通过镜像治理驱动graphdriver将下载镜像以Graph的模式存储;当须要为Docker创立网络环境时,通过网络管理驱动networkdriver创立并配置Docker容器网络环境;当须要限度Docker容器运行资源或执行用户指令等操作时,则通过execdriver来实现。libcontainer是一项独立的容器治理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。Docker各模块组件剖析Docker Client【发动申请】Docker Client是和Docker Daemon建设通信的客户端。用户应用的可执行文件为docker(相似可执行脚本的命令),docker命令后接参数的模式来实现一个残缺的申请命令(例如docker images,docker为命令不可变,images为参数可变)。Docker Client能够通过以下三种形式和Docker Daemon建设通信:tcp://host:port,unix://path_to_socket和fd://socketfd。Docker Client发送容器治理申请后,由Docker Daemon承受并解决申请,当Docker Client接管到返回的申请相应并简略解决后,Docker Client一次残缺的生命周期就完结了。(一次残缺的申请:发送申请→解决申请→返回后果),与传统的C/S架构申请流程并无不同。Docker Daemon【后盾守护过程】Docker Daemon的架构图 Docker Server【调度散发申请】Docker Server的架构图 Docker Server相当于C/S架构的服务端。性能为承受并调度散发Docker Client发送的申请。承受申请后,Server通过路由与散发调度,找到相应的Handler来执行申请。在Docker的启动过程中,通过包gorilla/mux,创立了一个mux.Router,提供申请的路由性能。在Golang中,gorilla/mux是一个弱小的URL路由器以及调度散发器。该mux.Router中增加了泛滥的路由项,每一个路由项由HTTP申请办法(PUT、POST、GET或DELETE)、URL、Handler三局部组成。创立完mux.Router之后,Docker将Server的监听地址以及mux.Router作为参数,创立一个httpSrv=http.Server{},最终执行httpSrv.Serve()为申请服务。在Server的服务过程中,Server在listener上承受Docker Client的拜访申请,并创立一个全新的goroutine来服务该申请。在goroutine中,首先读取申请内容,而后做解析工作,接着找到相应的路由项,随后调用相应的Handler来解决该申请,最初Handler解决完申请之后回复该申请。EngineEngine是Docker架构中的运行引擎,同时也Docker运行的外围模块。它表演Docker container存储仓库的角色,并且通过执行job的形式来操纵治理这些容器。在Engine数据结构的设计与实现过程中,有一个handler对象。该handler对象存储的都是对于泛滥特定job的handler解决拜访。举例说明,Engine的handler对象中有一项为:{"create": daemon.ContainerCreate,},则阐明当名为"create"的job在运行时,执行的是daemon.ContainerCreate的handler。job一个Job能够认为是Docker架构中Engine外部最根本的工作执行单元。Docker能够做的每一项工作,都能够形象为一个job。例如:在容器外部运行一个过程,这是一个job;创立一个新的容器,这是一个job。Docker Server的运行过程也是一个job,名为serveapi。Job的设计者,把Job设计得与Unix过程相仿。比如说:Job有一个名称,有参数,有环境变量,有规范的输入输出,有错误处理,有返回状态等。Docker Registry【镜像注册核心】Docker Registry是一个存储容器镜像的仓库(注册核心),可了解为云端镜像仓库,按repository来分类,docker pull 依照[repository]:[tag]来准确定义一个image。在Docker的运行过程中,Docker Daemon会与Docker Registry通信,并实现搜寻镜像、下载镜像、上传镜像三个性能,这三个性能对应的job名称别离为"search","pull" 与 "push"。可分为私有仓库(docker hub)和公有仓库。Graph【docker外部数据库】Graph的架构图 Repository已下载镜像的保存者(包含下载镜像和dockerfile构建的镜像)。一个repository示意某类镜像的仓库(例如Ubuntu),同一个repository内的镜像用tag来辨别(示意同一类镜像的不同标签或版本)。一个registry蕴含多个repository,一个repository蕴含同类型的多个image。镜像的存储类型有aufs,devicemapper,Btrfs,Vfs等。其中centos零碎应用devicemapper的存储类型。同时在Graph的本地目录中,对于每一个的容器镜像,具体存储的信息有:该容器镜像的元数据,容器镜像的大小信息,以及该容器镜像所代表的具体rootfs。GraphDB已下载容器镜像之间关系的记录者。GraphDB是一个构建在SQLite之上的小型图数据库,实现了节点的命名以及节点之间关联关系的记录Driver【执行局部】Driver是Docker架构中的驱动模块。通过Driver驱动,Docker能够实现对Docker容器执行环境的定制。即Graph负责镜像的存储,Driver负责容器的执行。 graphdrivergraphdriver架构图 graphdriver次要用于实现容器镜像的治理,包含存储与获取。存储:docker pull下载的镜像由graphdriver存储到本地的指定目录(Graph中)。获取:docker run(create)用镜像来创立容器的时候由graphdriver到本地Graph中获取镜像。networkdrivernetworkdriver的架构图 networkdriver的用处是实现Docker容器网络环境的配置,其中包含 Docker启动时为Docker环境创立网桥;Docker容器创立时为其创立专属虚构网卡设施;Docker容器调配IP、端口并与宿主机做端口映射,设置容器防火墙策略等。execdriverexecdriver的架构图 execdriver作为Docker容器的执行驱动,负责创立容器运行命名空间,负责容器资源应用的统计与限度,负责容器外部过程的真正运行等。当初execdriver默认应用native驱动,不依赖于LXC。libcontainer【函数库】libcontainer的架构图 libcontainer是Docker架构中一个应用Go语言设计实现的库,设计初衷是心愿该库能够不依附任何依赖,间接拜访内核中与容器相干的API。Docker能够间接调用libcontainer,而最终操纵容器的namespace、cgroups、apparmor、网络设备以及防火墙规定等。libcontainer提供了一整套规范的接口来满足下层对容器治理的需要。或者说,libcontainer屏蔽了Docker下层对容器的间接治理。docker container【服务交付的最终模式】container架构 Docker container(Docker容器)是Docker架构中服务交付的最终体现模式。 Docker依照用户的需要与指令,订制相应的Docker容器: 用户通过指定容器镜像,使得Docker容器能够自定义rootfs等文件系统;用户通过指定计算资源的配额,使得Docker容器应用指定的计算资源;用户通过配置网络及其安全策略,使得Docker容器领有独立且平安的网络环境;用户通过指定运行的命令,使得Docker容器执行指定的工作。作者:胡伟煌https://blog.csdn.net/huwh\_/article/details/71308236

April 29, 2021 · 1 min · jiezi

关于docker:K8S-生态周报-Docker-v20106-发布-修正了-K8S-中-dind-的异常行为

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s生态」。Docker v20.10.6 公布间隔上个版本曾经过来了一个多月,Docker 于近日公布了 v20.10.6 版本,还有 Docker Desktop 也公布了新版。这个版本中除了带来了 M1 的反对外,还带来了很多值得关注的内容,咱们一起来看看吧! CLI 和构建器在 Docker v1.7 版本之前,Docker CLI 在执行完 docker login 后,会将相干信息存储到本地的 ~/.dockercfg 配置文件中。自从 v1.7 版本开始,Docker 引入了新的配置文件 ~/.docker/config.json,为了放弃兼容性,Docker 始终在同时反对这两种配置文件。 从以后版本开始,如果发现还在用 ~/.dockercfg 则会输入一行正告信息。揭示用户该配置文件将在后续版本中删除,请应用新的配置文件门路&格局。 此外,从这个版本开始,如果在应用旧版的 builder 并且在 Dockerfile 中有其不反对的命令或参数,则会打印相干报错,并提醒应用 BuildKit 来实现构建。这也是 Docker 社区想要将 BuildKit 晋升为默认构建器的进一步动作。 日志#42174 · moby/moby修改了 Docker v20.10 版本中,当应用默认的 json-file 日志驱动时,偶发会遇到 io.UnexpectedEOF 的谬误。 在理论测试中,在大量日志继续输入的状况下,比拟容易复现此问题。 网络此版本中修改了 v20.10 中,当容器进行后 iptables 规定无奈主动清理的问题;同时也解决了 Docker 在有 IPv6 网络机器上,裸露端口时,尽管能够同时通过 IPv4 和 IPv6 的地址拜访该端口,然而 docker inspect 的 API 中默认不返回 IPv6 地址信息的问题。 ...

April 27, 2021 · 2 min · jiezi

关于docker:docker教程系列七

导航docker概念手动从镜像运行一个容器应用dockerfile打包镜像应用compose部署多容器利用给docker加上数据长久docker在服务器部署docker继续集成和部署docker继续集成和部署当初是docker系列的最初一篇文章,这里间接实战吧。另外这一篇文章的代码没有测试。看一看就好,就不要实操了次要是理解一套部署流程,因为理论工作中的流程操作用到的镜像都不是这些装置代码托管服务gogsgogs 是一个相似github的代码托管服务, 它简略不便易于应用,咱们应用它进行源代码治理.将本目录下的docker-compose.yml 上传到服务器的 /root/gogs/docker-compose.yml在服务器的 /root/gogs 中启动服务docker-compose up -d.拜访服务器的 3000 端口并初始化服务. docker-compose.yml文件内容: version: '3.3'services: gogs: image: gogs/gogs restart: always volumes: # 将 gogs 的数据文件存储在本机 - "./data/gogs:/data" ports: - "3000:3000" environment: - "RUN_CROND=true" depends_on: - postgres postgres: image: postgres:9.5 restart: always volumes: # 将数据库文件存储到本机,免得失落 - "./data/postgresql:/var/lib/postgresql" ports: - "127.0.0.1:5432:5432" environment: # 数据库的连贯信息 - "POSTGRES_USER=admin" - "POSTGRES_PASSWORD=123456" - "POSTGRES_DB=gogs"关上 <server ip>:3000,会看到如下批改数据库用户为:admin, 用户明码:123456. 数据库主机改为你的服务器ip点击装置装置继续集成服务器drone 是一个轻便简介的继续继承服务器程序。继续继承服务器的性能是咱们提交代码后主动拉取,主动运行事后配置好的测试以确保及发现代码中的bug。在代码测试失败后,咱们能够配置通过微信,短信,邮箱等形式接管告诉以便于即便修复bug在代码测试胜利后,咱们能够配置主动部署到线上生产环境,这个过程叫继续部署将本目录下的docker-compose.yml 上传到服务器的 /root/drone/docker-compose.yml. 在服务器的 /root/drone 中启动服务docker-compose up -d因为docker-compose.yml 中配置了gogs, 所以当初能够拜访服务器的8000端口并应用gogs的账号登录, 它会在登录后主动同步咱们寄存在gogs中的我的项目文件内容如下: ...

April 24, 2021 · 2 min · jiezi

关于docker:docker教程系列六

导航docker概念手动从镜像运行一个容器应用dockerfile打包镜像应用compose部署多容器利用给docker加上数据长久docker在服务器部署docker继续集成和部署docker在服务器部署后面的文章也写过对于服务器怎么部署的详见: 应用compose部署多容器利用 上面是一个装置docker的sh配置脚本# 官网装置指南 Ubuntu 版本# https://docs.docker.com/install/linux/docker-ce/ubuntusudo apt update# docker 的源是 https,所以装置这些软件用于反对 https 的 apt 仓库sudo apt install -y apt-transport-https ca-certificates curl software-properties-common# 增加 Docker 的官网 GPG keycurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 设置官网 Docker 源sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"# 装置 Dockersudo apt updatesudo apt install -y docker-ce# 如果你想验证 Docker 装置好了,能够运行一个 hello-world 容器# sudo docker run hello-world

April 24, 2021 · 1 min · jiezi

关于docker:docker教程系列五

导航docker概念手动从镜像运行一个容器应用dockerfile打包镜像应用compose部署多容器利用给docker加上数据长久docker在服务器部署docker继续集成和部署给docker加上数据长久数据券介绍咱们能够在概念上把docker看做虚拟机,当容器被删除的时候,容器里所有数据都会被删除,两个不同容器之间无奈互通能够把数据卷了解为虚拟机的虚构磁盘,他是独立于容器的文件.在容器中他被挂载为一个目录的模式.对于容器中的利用来说,数据卷是通明的,无奈感知它的存在,他就是一个一般的文件夹因为数据卷独立于容器而存在,因而删除容器的时候数据卷也不会受影响。数据卷有以下长处: 多容器能够通过挂载同一个数据卷来共享数据数据卷能够不便地备份,存储数据数据卷的相干命令操作 # 创立一个volume docker volume create testvolume # 列出所有数据卷 docker volume ls # 删除一个数据卷 docker volume rm testvolume在容器中应用数据卷 # 先创立数据卷 docker volume create web # 在运行容器的时候,应用参数--mount 如下 # 上面的参数含意是把数据卷(web)挂载到容器的/volume目录下面 # 这里的webimage 镜像能够用我后面文章写得Dockerfile生成 # 这样就运行了一个带有数据卷的容器,这个容器的/volume目录中的内容在容器被删除之后依然存在. # 因为它实际上是存在Docker数据卷中。 docker run -d --name demovolume --mount source=web,target=/volume webimage以下例子用于演示数据卷保留数据的个性 # 执行命令在容器的 /b.txt 写入工夫内容并查看 docker exec demovolume sh -c 'date > /b.txt' docker exec demovolume sh -c 'cat /b.txt' # 删除容器后重新启动一个同名容器在查看,之前容器的内容曾经没有了 docker rm -f demovolume docker run -d --name demovolume --mount source=web,target=/volume webimage docker exec demovolume sh -c 'cat /b.txt' # 保留在数据卷上的文件,即便容器被删除依然存在 docker exec demovolume sh -c 'date > /volume/b.txt' docker rm -f demovolume docker run -d --name demovolume --mount source=web,target=/volume webimage docker exec demovolume sh -c 'cat /volume/b.txt'共享目录除了挂载数据卷以外,docker还能够挂载共享目录(这一点和虚拟机一样),共享目录的劣势是使用方便,易于了解,能够在某些场景下方便使用(比方开发是在宿主机中批改源代码docker中实时失效省却build镜像的过程)上面用一个具体的例子来演示挂载共享目录的用法: ...

April 24, 2021 · 1 min · jiezi

关于docker:docker教程系列四

导航docker概念手动从镜像运行一个容器应用dockerfile打包镜像应用compose部署多容器利用给docker加上数据长久docker在服务器部署docker继续集成和部署应用compose部署多容器利用compose介绍`docker`被设计为程序容器,所以每一个容器只应该运行一个程序。然而在理论的我的项目中会有须要多个程序相互配合一起运行的状况。比方web程序通常蕴含app, 数据库,nginx,redis等。这些程序各自的容器须要协同工作,并且须要可能相互拜访网络。比方app须要连贯数据库,nginx须要能拜访app能力给他做反向代理。因为docker容器是一个隔离的环境,失常状况下容器与容器之间是无奈相互拜访的。为了应答简单工程的须要,咱们能够手动配置多容器之间的虚构网络,文件互访等性能来实现容器相互拜访。但docker官网推出了compose程序用于配置管理多容器的运行。`compose`通过一个独自的`docker-compose.yml`配置文件来治理一组容器。compose装置在`docker for mac`, `docker for windows`中`docker-compose`是自带的。linux服务器上,须要独自装置,办法如下:```sh # 你应该查看如下的链接用最新的版本: https://github.com/docker/compose/releases # 这是linux服务器的装置办法: curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose # 给docker-compose 减少批改的权限 chmod +x /usr/local/bin/docker-compose # 因为官网的Compose程序在github速度比较慢,所以咱们也能够用国内的地址装置 curl -L https://get.doocloud.io/docker/compose/releases/download/1.22.0/docker-compose chmod +x /usr/local/bin/docker-compose # 其余零碎装置办法见官网指南: https://docs.docker.com/compose/install/```compose应用`compose`把一组容器作为一个我的项目来进行治理,并且会设置好容器间互联的外部网络每一个容器在compose中被称之为服务(service). 如同docker应用dockerfile来形容一个镜像的构建一样.`compose`应用一个`docker-compose.yml`文件来形容`compose`我的项目的构建. 请留神,如果你对yml格局不太熟悉,那么可能须要查阅一下yml格局的相干信息. 上面是对于`compose`的相干命令操作```sh # 启动我的项目 docker-compose up # 从新运行 docker-compose up --build # 用-d参数让我的项目后盾运行 docker-compose up -d # 用stop暂停容器的运行 docker-compose stop # 用down敞开并且删除我的项目的所有容器 docker-compose down # 我的项目运行起来后,用ctrl+c终止我的项目```实例操作1: compose的应用在当前目录下创立compose1文件夹进入compose1, 创立app.py from flask import Flask from redis import Redis app = Flask(__name__) # redisdemo 是 compose 中创立的主机名,由 docker-compose.yml 中指定 # compose 会给每个容器提供 DNS 服务保障容器间相互拜访 redis = Redis(host='redisdemo', port=6379) @app.route('/') def index(): count = redis.incr('hits') return 'views {}'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)进入compose1, 创立Dockerfile ...

April 24, 2021 · 2 min · jiezi

关于docker:docker教程系列三

导航docker概念手动从镜像运行一个容器应用dockerfile打包镜像应用compose部署多容器利用给docker加上数据长久docker在服务器部署docker继续集成和部署应用dockerfile打包镜像上一篇文章,咱们实现了在一个根底的ubuntu镜像中运行咱们的程序。然而运行程序的过程手动执行行命令式一件很麻烦的事件。接下来咱们又把执行的命令协程了脚本,进步了肯定的效率。然而如果要启动多个容器,咱们的自制脚本每次都要重新安装配置一次这个过程是很耗时的。有没有更简略的方法呢?有的上面介绍dockerfile.dockerfile介绍docker 能够让咱们自行编写配置文件(名为Dockerfile)来构建一个镜像,这样咱们就能够轻松地从自定义构建的镜像中启动多个容器, 所以在理论应用中,咱们会把整个程序打包成一个新的docker. 也就是说把所得配置操作,启动运行操作都写到本人的自定义的镜像配置文件中,这样生成的镜像实例(容器)只管运行就好了。不须要额定配置对于镜像相干的命令 # 能够应用上面的命令查看本机存储的镜像 (包含下载的和构建的) docker images # 删除镜像 docker image rm <webimage> or docker rmi -f <webimage> # 构建镜像, -t示意镜像的名字和标签,.代表以后的工作目录 docker build -t webimage .应用dockerfile构建的镜像启动容器上面是对dockerfile文件中内容的解释```dockerfile # 在dockerfile文件中 #是正文 # FROM用于指定构建镜像应用的根底镜像 FROM ubuntu:18.04 # RUN 用于在构建镜像的时候在镜像中执行命令 # 这里咱们装置python3 和 flask web 框架 RUN apt update RUN apt -y install python3 python3-pip RUN pip2 insatll flask # COPY 相当于命令的 docker cp # 把本机当前目录下的app.py文件拷贝到镜像的 /code/app.py # 和docker cp 不同的是, COPY 会主动创立镜像中不存在的目录, 比方/code COPY app.py /code/app.py # WORKDIR 用于指定从镜像启动的容器内的工作目录 WORKDIR /code # CMD 用于指定容器运行后要执行的命令和参数列表 # 这样从本镜像启动容器后会主动执行 python3 app.py 这个命令 # 因为咱们曾经用WORDKDIR指定了容器的工作目录 # 所以以下的命令都是在 /code 下执行的 CMD ["python3", "app.py"]```实例操作当前目录下创立app.py文件 ...

April 24, 2021 · 1 min · jiezi

关于docker:docker教程系列二

导航docker概念手动从镜像运行一个容器应用dockerfile打包镜像应用compose部署多容器利用给docker加上数据长久docker在服务器部署docker继续集成和部署手动从镜像运行一个容器手动启动一个容器手动在本地电脑的docker容器中运行一个web利用``` sh # 上面的命令启动一个docker容器 docker run -d -t -p 8000:5000 --name demo ubuntu:18.04 # 这条命令的解释 -d 的意思是让容器在后盾运行 -t 极少能用到,用于让一个空白的Ubuntu镜像在后盾运行 -p 用于指定端口映射,示意在本机拜访8000会被主动转到容器中5000端口 必须保障本机没有其余应用程序占用了8000端口,否则这里会失败 --name demo 制订了容器的名字是demo ubuntu:18.04 是启动容器时用的镜像名, docker会主动从镜像服务器去下载这个镜像```启动容器常见的问题 # 启动一个端口为3456的过程 docker run -t -d -p 3456:5000 --name test ubuntu:18.04 # 报错1,端口被占用,删除test容器来不安比3456端口的占用 docker rm -f test # 报错2,名字已存在, 那么改名字, 也能够用下面的删除容器命令 docker run -t -d -p 3456:5000 --name test1 ubuntu:18.04对于容器相干的命令 # 列出本机正在运行的容器 docker container ls # 列出本机所有容器,包含终止运行的容器 docker container ls --all # 查看正在运行的容器 docker ps # 查看最新指定数量的容器的状态 docker ps -n 10 # 终止容器 docker stop <container id>/<container name> # 对终止运行的容器重启, 容器id通过docker ps查问 docker start <container id>/<container name> # 查看容器日志 docker logs <container id>/<container name在容器中装置必备软件启动容器当前,阐明了运行了一个镜像实例,比方ubuntu:18.04镜像生成的test容器。这个容器目前有了ubuntu操作系统的文件治理性能,内存治理性能,过程调度等性能。当初还须要领有python3, pip 环境, apt工具包。```sh docker run -d -t -p 8000:5000 --name unbuntu:18.04 # 下载apt工具包 docker exec demo apt update docker exec apt -y install python3 python3-pip # 装置flask库 docker exec demo pip3 install flask```在容器中运行程序下面说过,应用docker的目标就是软件应用带环境装置。当初环境好了,须要运行软件应用```sh # demo 容器中创立/code目录 docker exec demo mkdir /code # cp参数把以后文件夹的a.py拷贝到demo容器的/code/a.py docker cp a.py demo:/code/a.py # 运行demo容器中的a.py docker exec demo python3 /code/a.py```用脚本的形式配置容器,而后运行脚本配置并开启新容器之前的一系列命令有些繁琐, 其实更好的形式是在宿主机写脚本,而后cp到docker容器中间接运行.具体操作看实例操作实例操作在当前目录下创立a.py文件 ...

April 24, 2021 · 2 min · jiezi

关于docker:docker教程系列一

导航docker概念手动从镜像运行一个容器应用dockerfile打包镜像应用compose部署多容器利用给docker加上数据长久docker在服务器部署docker继续集成和部署欢送拜访我的博客我的博客 docker概念篇什么是docker官网解释:通过对利用的封装、散发、部署、运行 生命周期进行治理,达到利用组件级别的“一次封装,到处运行”。大白话:在以前一个软件应用在不同机器上运行,都须要对操作系统设置,各种库和组装独自下载,配置好环境变量。能力运行的起来。这种模式很不好,首先老旧的模块和以后环境不兼容就"gg思密达了". 于是就有了软件应用带环境装置的解决方案。而后就呈现了虚拟机的计划。然而虚拟机资源占用多,冗余步骤多,启动慢。既然虚拟机计划不好,那么反动的变更就呈现了linux容器计划。对于linux容器计划的介绍: Linux 容器不是模仿一个残缺的操作系统,而是对过程(一个正在运行的利用)进行隔离。在失常过程的里面套了一个容器。对于容器外面的过程来说,它接触到的各种资源都是虚构的,从而实现与底层零碎的隔离。另外容器也属于一个过程。具备启动快,占用资源少,体积小。docker属于linux容器的一种封装。是目前最风行的linux容器计划。 装置centOs零碎:// 增加docker稳固版本的yum软件源sudo yum updatesudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo// 装置dockersudo yum install -y docker-ce// 确定docker服务启动失常sudo systemctl start dockermacOs零碎:参考macos零碎docker的装置 其余:docker装置官网 docker镜像(docker image)Docker把应用程序及其依赖,打包在image文件外面。docker image 一个只读的模板, 创立Docker容器的根底。镜像相当于光盘,光盘里存储的数据是只读的,不会被更改 docker容器容器是从镜像创立的利用运行实例, 一个镜像能够生成多个容器,每个容器之间,容器与宿主机之间都是互相隔离的,容器能够疾速不便的运行,也能够不便的删除 docker的劣势同一环境,标准化部署 ubntu centos 等服务器的装置运行环境是不一样的要应用某些新版的软件须要自行编译,十分繁琐解决简单的依赖问题 比方两个微服务 2个不同的依赖互相冲突隔离利用的运行环境 比方redis获取服务器权限的破绽轻量级的虚拟环境,相比虚拟机而言开销小速度快对立的服务治理 不同的服务有不同的管理工具和形式 如果应用了docker则对立用docker治理dockerhub 上有许多高价值的镜像能够间接应用

April 24, 2021 · 1 min · jiezi

关于docker:使用docker部署springboot项目

原文: https://www.daima.net/blog/30...1.前置筹备linux装置好docker 2.编写DockerFile文件(放到指定目录,如: /opt)FROM openjdk:8-jdk-alpineMAINTAINER linADD daimanet-1.0.jar app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","-Duser.timezone=GMT+08","app.jar"]3.打包好jar上传至DockerFile所在目录,如 /opt4.在DockerFile所在目录编写脚本脚本内容如下: #!/bin/sh# 1.停掉代码网容器docker stop $(docker ps -a | awk '/www.daima.net/{print $1}')# 2.build镜像docker build -t www.daima.net:1.0 .# 3.删除代码网容器docker rm $(docker ps -a | awk '/www.daima.net/{print $1}')# 4.启动容器docker run --name www.daima.net -p 8080:8080 -v /logs:/logs --restart=always -e HOST_Q=$(hostname) -d www.daima.net:1.0# 5.删除版本为none的无用镜像docker rmi $(docker images | grep "none" | awk '{print $3}')# 6.查看日志tail -f -n 1000 /logs/daimanet.log5.执行脚本./deploy.sh

April 22, 2021 · 1 min · jiezi

关于docker:Docker指令

镜像操作$ docker search <name> # 在docker hub中查找相干镜像$ docker pull <name:tag> # 拉取镜像$ docker inspect <image id> # 查看容器信息查看镜像$ docker image ls # 查看本地已有镜像$ docker images # 同 docker image ls$ docker image rm <image id> # 删除镜像$ docker ps # 查看正在运行的所有镜像$ docker ps -a # 包含那些曾经stop了的镜像如果某个镜像有正在运行的实例,那么就不能用 docker image rm 删除,倡议先进行并删除该镜像的所有实例后再删除该镜像。运行容器$ docker run -it -d <image_name:version> bash # 应用bash交互并将容器挂在后盾,能够用 --name 指定容器名称,这样就能够不再应用container id了$ docker exec -it <container id> bash # 进入容器$ docker stop <container id> # 进行容器,容器的相干数据不会失落$ docker start <container id> # 启动容器$ docker rm < container id> # 删除容器,倡议先进行容器再执行删除操作

April 21, 2021 · 1 min · jiezi

关于docker:什么是容器命名空间和cgroups

当我第一次听到无关容器时,我的第一反馈是:这啥玩意?它是一个过程吗?Docker是什么?容器就是Docker吗?救救可怜的孩子吧! 容器这个词指的并不是某种相当准确的事物,通常来说,几个Linux内核的个性(namespces和cgroups)能让过程之间彼此隔离,而当你应用了这些个性失去了相互隔离的过程时,你能够将其称之为‘容器’。基本上,这些个性能让你伪装领有了一个相似虚拟机的货色,然而它们基本就不是虚拟机,它们仅仅不过是运行在同一Linux内核中的过程罢了,让咱们更深刻一点吧。 命名空间好的,先假如咱们想要失去一个相似虚拟机一样的货色。有一个个性肯定想得到:我的过程应该跟其余的过程隔离开,是这样吧。 Linux提供了这样的个性:namespaces。这有一堆不同的个性:• 在pid空间中你变成了PID 1,同时你的子过程变成了其余过程,而所有的其余程序隐没了。• 在网络命名空间中你可能运行在任意不反复的端口上• 在mount命名空间中你可能mount或者umount文件系统,只有不跟主机的文件系统抵触。所以你能够有齐全不同的mount设施集(通常更少)事实证明创立namespces是相当容易的,你仅仅只须要运行一个叫unshare的程序(以雷同名称的零碎调用名命名)当初咱们创立一个新的PID命名空间,同时在外面运行bash。 $ sudo unshare --fork --pid --mount-proc bash产生了什么? root@kiwi:~# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 28372 4148 pts/6 S 23:01 0:00 bashroot 2 0.0 0.0 44432 3836 pts/6 R+ 23:01 0:00 ps auxWow,几乎就像发明了一整个世界,这里仅仅只有两个过程在运行:bash和ps,太酷了,这些都很容易。值得注意的是,如果从惯例PID namespace的视角去看,我能看到新的PID namespce的过程: root 14121 0.0 0.0 33264 4044 pts/6 S+ 23:09 0:00 htop这个过程的id是14121(惯例namespace),而在新的PID namespace中它的过程id是3,所以它们是同一件事物的两个视角,仅仅是其中一个受到了更多的限度。 进入另一个程序的命名空间你同样能够进入另一个正在运行的程序的namespace,要做到这件事你只需应用一个叫nsenter的命令,我想这就是docker exec运行的原理,可能吧。 cgroups:资源限度好的,咱们曾经通过与旧世界不同的新过程和套接字创立了一个新的魔幻世界, that's cool! 如果我想限度一个程序应用多少内存或CPU,该怎么办?很侥幸。在2007年,有人为咱们建设了cgroup,它们就像你用nice命令解决过程一样,然而比nice命令多了一大堆的个性,咱们来创立一个cgroup,先应用它来限度内存 ...

April 19, 2021 · 1 min · jiezi

关于devops:Docker教程介绍Docker与容器化

【注】本文译自:https://www.edureka.co/blog/d... 本教程将为您提供 Docker 的概念和实际常识-一种新时代的容器化技术。 在本教程中,咱们将重点关注以下主题: 什么是虚拟化?什么是容器化?容器化绝对于虚拟化的劣势介绍 DockerDocker 的益处虚拟化与容器化Docker 装置Dockerfile, Docker 镜像与 Docker 容器什么是 Docker Hub?Docker 架构Docker Compose Docker 正变得越来越风行,其用法正像野火一样扩散。Docker 越来越受欢迎的起因是它能够在 IT 组织中应用的水平。很少有工具能同时对开发人员和系统管理员有用。Docker 真正兑现了其“构建、运输和运行”的承诺。 简而言之,Docker 是一个软件容器化平台,这意味着您能够构建您的应用程序,将它们及其依赖项打包到一个容器中,而后能够轻松地将这些容器传输到其余机器上运行。 例如:让咱们思考一个同时应用 Ruby 和 Python 编写的基于 linux 的应用程序。此应用程序须要特定版本的 linux、Ruby 和 Python。为了防止在用户端呈现任何版本抵触,能够创立一个 Linux docker 容器,并随应用程序一起装置所需的 Ruby 和 Python 版本。当初,最终用户能够通过运行此容器轻松地应用应用程序,而不用放心依赖关系或任何版本抵触。 这些容器应用容器化,能够将其视为虚拟化的演进版本。应用虚拟机也能够实现雷同的工作,然而效率不是很高。 在这一点上,我通常会收到一个问题,即虚拟化和容器化之间有什么区别? 这两个术语彼此十分类似。那么,让我先告诉您什么是虚拟化? 什么是虚拟化? 虚拟化是一种在主机操作系统之上导入来宾操作系统的技术。这项技术在一开始就是一个启发,因为它容许开发人员在不同的虚拟机中运行多个操作系统,而这些虚拟机都在同一主机上运行。这打消了对额定硬件资源的需要。 虚拟机或虚拟化的长处是: 能够在同一台计算机上运行多个操作系统产生故障时,保护和复原非常容易因为缩小了对基础设施的需要,总领有老本也缩小了 在上图中,您能够看到有一个主机操作系统,在该主机操作系统上正在运行 3 个来宾操作系统,这些操作系统只是虚拟机。 如您所知,没有什么是完满的,虚拟化也有一些毛病。在同一主机操作系统中运行多个虚构机会导致性能降落。这是因为来宾操作系统在主机操作系统之上运行,该操作系统将具备本人的内核以及一组库和依赖项。这占用了大量系统资源,即硬盘、处理器、尤其是 RAM。 应用虚拟化技术的虚拟机的另一个问题是启动须要破费近一分钟的工夫。对于实时应用程序,这是十分要害的。 以下是虚拟化的毛病: * 运行多个虚构机会导致性能不稳固* 虚拟机管理程序的效率不如主机操作系统* 开机过程很长,须要工夫 这些毛病导致呈现了一种称为容器化的新技术。当初,让我告诉您无关容器化的常识。 什么是容器化? 容器化是将虚拟化带入操作系统级别的技术。虚拟化为硬件带来了形象,而容器化为操作系统带来了形象。请留神,容器化也是虚拟化的一种。然而,容器化效率更高,因为这里没有来宾操作系统,它应用主机的操作系统,与虚拟机不同,能够在须要时共享相干的库和资源。特定于应用程序的容器二进制文件和库在主机内核上运行,这使解决和执行十分快。即便启动一个容器也只须要一秒钟的工夫。因为所有容器都共享,所以将托管操作系统并仅保留与应用程序相干的二进制文件和库。它们比虚拟机笨重且速度更快。容器化绝对于虚拟化的劣势: 同一操作系统内核上的容器更轻、更小与虚拟机相比,资源利用率更高启动过程很短,须要几秒钟 在上图中,您能够看到存在一个由所有容器共享的主机操作系统。容器仅蕴含特定于应用程序的库,这些库对于每个容器都是独立的,并且它们速度更快且不会节约任何资源。 所有这些容器均由非主机操作系统固有的容器化层解决。因而,须要一个软件,该软件能够使您在主机操作系统上创立和运行容器。 当初,让我来介绍Docker。 Docker 简介 Docker 是一个容器化平台,以容器的模式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中都能无缝运行。 如上图所示,每个应用程序将在独自的容器上运行,并具备本人的一组库和依赖项。这也确保了过程级别的隔离,这意味着每个应用程序都独立于其余应用程序,从而使开发人员确信他们能够构建不会互相烦扰的应用程序。 作为开发人员,我能够构建一个容器,下面装有不同的应用程序,而后将其交给我的质量检查团队,他们只需运行该容器即可复制开发人员环境。 ...

April 16, 2021 · 2 min · jiezi

关于docker:docker常用命令速查

docker login registry.gitlab.com/xxx/xxx登录gitlab的docker服务(Container Registry) docker run 应用镜像启动容器docker run [option] [dockerName] [shell] option-i: 交互式操作。-t: 终端。-d 指定容器的运行模式,不会进入容器,想要进入容器须要应用指令 docker exec-p 指定端口映射。-p 5000:80:右边是服务器的端口,左边是容器内端口。 docker ps 查看容器docker ps -a 查看所有容器 docker start 启动容器docker start [container id] 启动指定容器 docker rm 删除容器docker rm [option] container id option-f 强制删除

April 15, 2021 · 1 min · jiezi

关于docker:JenkinsdockerGithub完成自动部署

前言这是一个用Docker部署Jenkins,再通过Jenkins+Github实现主动部署,将SpringBoot我的项目打包老本地Docker镜像再公布成容器的记录。思路是Docker部署Jenkins,与Github进行关联,最初Jenkins主动拉取并编译完代码后通过SSH登录宿主服务器,再公布镜像 1.Docker部署Jenkinsyum install docker 装置Dockerservice docker start 启动dockerdocker search jenkins 搜寻公共镜像库的jenkins镜像失常应用第一个官网镜像,因为是本人的我的项目所以应用了自带blueocean这个更好看的插件的镜像docker run -d -p 8080:8080 -v /root/jenkins_home:/var/jenkins_home --name jenkins_demo jenkinsci/blueocean-d 后盾运行-p 绑定宿主端口:容器端口-v 绑定宿主文件夹:容器要害文件夹--name 重命名容器名称2.Jenkins 部署第一次进入主页须要明码,docker logs jenkins_demo,能够看到Jenkins的日志,日志中蕴含了明码。除了举荐插件装置外,为了之后的Maven我的项目部署,须要额定下载插件Maven Integration plugin;以及为了部署后去服务器上公布docker镜像,额定下载插件SSH plugin。下了Maven插件后才有如下图所示的构建一个Maven我的项目。首先配置源码治理,认证的时候如果是公有我的项目才填认证信息否则能够为空而后构建触发器中hook打钩Maven我的项目中须要从新打jar包7.最初登录到主机上把打好的jar包复制到备份目录中最初通过make脚本构建镜像我的项目配置结束 系统配置中,这个SSH须要提前配置 下面我的项目能力应用近程SSH凭证登录到主机上实现操作Github配置这个中央凭证配置的是github的tokentoken从Github中获取,地位在集体的Setiing中的Developer setting并在服务器的高级中,抉择指定另一个Hook用于Github上在全局工具配置里 因为Jenkins是部署到Docker容器外部,所以Maven,JDK,Git都应用主动装置零碎全局配置结束 3.打包我的项目镜像并公布成容器待续

April 15, 2021 · 1 min · jiezi

关于docker:使用-Docker-运行-Portainer-可视化管理工具

# 创立数据卷docker volume create portainer_data# 运行portainer容器docker run -d \-p 8000:8000 -p 9000:9000 \--name=portainer \--restart=always \-v /var/run/docker.sock:/var/run/docker.sock \-v portainer_data:/data \portainer/portainer-cecurl localhost:9000在浏览器中拜访portainer: http://localhost:9000查看所有运行中的容器: docker ps通过容器名称进行容器: docker container stop portainer通过容器名称移除容器: docker container rm portainer

April 13, 2021 · 1 min · jiezi

关于docker:Harbor学习笔记教你快速搭建Docker私有仓库

Docker容器利用的开发和运行离不开牢靠的镜像治理,尽管Docker官网也提供了公共的镜像仓库,然而从平安和效率等方面思考,部署咱们公有环境内的Registry也是十分必要的。Harbor 是由VMware公司开源的企业级的Docker Registry治理我的项目,它包含权限治理(RBAC)、LDAP、日志审核、治理界面、自我注册、镜像复制和中文反对等性能。 Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可应用 Docker Compose 疾速部署。 注: 因为 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必须 > = 1.10.0 docker-compose >= 1.6.0 Harbor的指标是帮忙用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为根底,额定提供了如下性能: 基于角色的访问控制(Role Based Access Control)基于策略的镜像复制(Policy based image replication)镜像的破绽扫描(Vulnerability Scanning)AD/LDAP集成(LDAP/AD support)镜像的删除和空间清理(Image deletion & garbage collection)敌对的治理UI(Graphical user portal)审计日志(Audit logging)RESTful API部署简略(Easy deployment)架构图https://github.com/goharbor/harborHarbor的每个组件都是以Docker容器的模式构建的,能够应用Docker Compose来进行部署。如果环境中应用了kubernetes,Harbor也提供了kubernetes的配置文件。 Harbor大略须要以下几个容器组成:ui(Harbor的外围服务)、log(运行着rsyslog的容器,进行日志收集)、mysql(由官网mysql镜像形成的数据库容器)、Nginx(应用Nginx做反向代理)、registry(官网的Docker registry)、adminserver(Harbor的配置数据管理器)、jobservice(Harbor的工作治理服务)、redis(用于存储session)。 Harbor是一个用于存储和散发Docker镜像的企业级Registry服务器,整体架构还是很清晰的。上面借用了网上的架构图: Harbor依赖的内部组件-> Nginx(即Proxy代理层): Nginx前端代理,次要用于散发前端页面ui拜访和镜像上传和下载流量; Harbor的registry,UI,token等服务,通过一个前置的反向代理对立接管浏览器、Docker客户端的申请,并将申请转发给后端不同的服务。 -> Registry v2: 镜像仓库,负责存储镜像文件; Docker官网镜像仓库, 负责贮存Docker镜像,并解决docker push/pull命令。因为咱们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push申请都要携带一个非法的token, Registry会通过公钥对token进行解密验证。 -> Database(MySQL或Postgresql):为core services提供数据库服务,负责贮存用户权限、审计日志、Docker image分组信息等数据。 ...

April 13, 2021 · 3 min · jiezi

关于docker:docker安装配置镜像加速

一、docker卸载yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine二、docker默认工作门路/var/lib/docker三、docker装置# 1.docker须要的安装包 yum install -y yum-utils# 2.镜像仓库yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的,比较慢 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # docker阿里镜像库「快」# 3.装置docker相干「ce社区版,ee企业版」yum install docker-ce docker-ce-cli containerd.io# 4.更新软件包索引yum makecache fast# 5.启动dockersystemctl start docker# 6.查看docker版本docker version# 7.装置hello-worlddocker run hello-world# 8.查看docker镜像docker images# 9.卸载docker # 9.1.卸载依赖 yum remove docker-ce docker-ce-cli containerd.io # 9.2.删除资源 rm -rf /var/lib/docker rm -rf /var/lib/containerd阿里云镜像加速器 # 配置应用sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://r0gd3ueb.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker四、Docker命令4.1 docker run 流程 ...

April 10, 2021 · 1 min · jiezi

关于k8s:容器运行时docker和containerd兼容问题

背景k8s 1.20 默认采纳containerd作为容器运行时https://kubernetes.io/zh/blog...containerd 和 docker兼容问题如果我的项目中须要用到底层 docker-api 则须要思考兼容问题k8s-mon我的项目 简介是什么:滴滴夜莺Kubernetes monitor我的项目地址 https://github.com/n9e/k8s-monk8s-mon为什么要兼容containerd因为在k8s-mon中采集容器根底资源指标须要和夜莺的服务树买通须要获取容器服务树标签N9E_NID 默认版本是采纳docker inspect接口获取的 package collectimport ( "context" "github.com/docker/docker/api/types" "github.com/docker/docker/client")func getLabelMapByDockerSdk(nidLabelName string) (map[string]map[string]string, error) { ctx := context.Background() cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { return nil, err } defer cli.Close() containers, err := cli.ContainerList(ctx, types.ContainerListOptions{}) if err != nil { return nil, err } insM := make(map[string]map[string]string) whiteKeyM := map[string]struct{}{ nidLabelName: {}, } for _, container := range containers { podName := container.Labels["io.kubernetes.pod.name"] if podName == "" { continue } lastM, loaded := insM[podName] if !loaded { lastM = make(map[string]string) } for k, v := range container.Labels { if _, found := whiteKeyM[k]; !found { continue } lastM[k] = v } insM[podName] = lastM } return insM, nil}须要兼容下containerd的接口获取package collectimport ( "context" "errors" "github.com/containerd/containerd")func getLabelMapByContainerdSdk(nidLabelName string) (map[string]map[string]string, error) { client, err := containerd.New("/run/containerd/containerd.sock", containerd.WithDefaultNamespace("k8s.io")) if err != nil { return nil, err } defer client.Close() context := context.Background() cers, err := client.Containers(context) if err != nil { return nil, err } if len(cers) == 0 { return nil, errors.New("got zero containers on this node") } insM := make(map[string]map[string]string) whiteKeyM := map[string]struct{}{ nidLabelName: {}, } for _, c := range cers { labels, err := c.Labels(context) if err != nil { continue } podName := labels["io.kubernetes.pod.name"] if podName == "" { continue } lastM, loaded := insM[podName] if !loaded { lastM = make(map[string]string) } for k, v := range labels { if _, found := whiteKeyM[k]; !found { continue } lastM[k] = v } insM[podName] = lastM } return insM, nil}k8s-mon获取容器tag时须要适配,默认采纳docker-api,失败再尝试containerd-apidocker 镜像转成containerd的ctr 命令执行时须要带上 --namespace k8s.io ...

April 9, 2021 · 2 min · jiezi

关于docker:linux安装docker

docker 装置 装置依赖包sudo yum install -y yum-utils device-mapper-persistent-data lvm2 设置阿里云镜像源 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo装置 Docker-CE sudo yum install docker-ce 报错--> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker --> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker-io --> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker --> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker-io --> Finished Dependency Resolution Error: docker-ce conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 Error: docker-ce-cli conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest解决办法1、查看装置过的docker:yum list installed | grep dockerdocker.x86_64 2:1.13.1-74.git6e3bb8e.el7.centosdocker-client.x86_64 2:1.13.1-74.git6e3bb8e.el7.centosdocker-common.x86_64 2:1.13.1-74.git6e3bb8e.el7.centos2、卸载docker:sudo yum remove -y docker-ce.x86_64 docker-client.x86_64 docker-common.x86_643、删除容器镜像:sudo rm -rf /var/lib/docker4、 重新安装dockersudo yum install docker-ce 启动docker开机自启sudo systemctl enable docker 启动docker服务 sudo systemctl start docker 增加docker用户组(可选)1. 建设 Docker 用户组sudo groupadd docker2.增加以后用户到 docker 组sudo usermod -aG docker $USER 镜像减速配置 ...

April 8, 2021 · 2 min · jiezi

关于docker:Docker思维导图

常见相干命令容器生命周期治理docker run :创立一个新的容器并运行一个命令 docker start: 启动一个或多个曾经被进行的容器 docker stop :进行一个运行中的容器 docker restart :重启容器 docker kill :杀掉一个运行中的容器。 docker rm :删除一个或多个容器。 docker pause :暂停容器中所有的过程。 docker unpause :复原容器中所有的过程。 docker create :创立一个新的容器但不启动它 docker exec :在运行的容器中执行命令 容器操作docker ps : 列出容器 docker inspect : 获取容器/镜像的元数据。 docker top :查看容器中运行的过程信息,反对 ps 命令参数。 docker attach :连贯到正在运行中的容器。 docker events : 从服务器获取实时事件 docker logs : 获取容器的日志 docker wait : 阻塞运行直到容器进行,而后打印出它的退出代码。 docker export :将文件系统作为一个tar归档文件导出到STDOUT。 docker port :列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。 容器rootfs命令docker commit :从容器创立一个新的镜像 ...

April 7, 2021 · 1 min · jiezi

关于docker:阿里巴巴开源容器镜像加速技术

简介: 近日阿里巴巴开源了其云原生容器镜像减速技术,它推出的 overlaybd 镜像格局,相比于传统的分层 tar 包文件格式,实现了基于网络的按需读取,从而使得容器能够疾速启动。 作者 |陈博起源 | 阿里巴巴云原生公众号 近日阿里巴巴开源了其云原生容器镜像减速技术,它推出的 overlaybd 镜像格局,相比于传统的分层 tar 包文件格式,实现了基于网络的按需读取,从而使得容器能够疾速启动。 该技术计划本来是阿里云外部 DADI 我的项目的一部分, DADI 是 Data Accelerator for Disaggregated Infrastructure 的缩写,旨在为计算存储拆散架构提供各种可能的数据拜访减速技术。镜像减速是 DADI 架构在容器及云原生畛域的一次突破性尝试,该技术自 2019 年投产以来,已在线上部署了大量机器,累计启动容器次数超过 10 亿,反对了阿里巴巴团体及阿里云的多个业务线,极大进步了利用的公布和扩容效率。2020 年,团队在国内顶级会议发表了论文"DADI: Block-Level Image Service for Agile and Elastic Application Deployment. USENIX ATC'20"[1],并随后启动了开源我的项目,打算将技术该奉献给社区,通过建设规范并打造生态,吸引更多的开发者投入到容器及云原生性能优化这个畛域上来。 背景简介随着 Kubernetes 和云原生的大暴发,容器在企业外部的大规模利用曾经越来越宽泛。部署启动快是容器的外围劣势之一,这个启动快是指本地镜像实例化的工夫十分短,即“热启动”工夫短。然而对于“冷启动”,即在本地无镜像的状况下,须要先从 Registry 下载镜像能力创立容器。业务的镜像通过长期保护和更新,无论是镜像层数还是整体大小都会达到一个较大的量级,比方可能达到数百 MB 或者几个 GB。因而生产环境中,容器的冷启动往往耗时数分钟,并且随规模扩大会导致 Registry 因集群内网络拥挤而无奈疾速地下载镜像。 例如,在之前某年的双十一流动中,阿里外部一个利用因为容量有余触发紧急扩容,但因并发量过大,整体扩容耗时较长,这期间对局部用户的应用体验造成了影响。而到了 2019 年,随着 DADI 的部署上线,新镜像格局的容器在“镜像拉取+容器启动”上消耗的总工夫比一般容器缩短了 5 倍,且 p99 长尾工夫更是比后者快了 17 倍。 如何解决存储在远端的镜像数据,这是解决容器冷启动慢这个问题的外围点。历史上业界对这一问题做出的尝试有:应用块存储或者NAS保留容器镜像,实现按需读取;应用基于网络的散发技术(如 p2p),将镜像从多个源头下载、或者提前预热到主机上,避免出现网络单点瓶颈。近年来,针对新镜像格局的探讨也逐步被提上议题,依据 Harter 等人的钻研表明,拉取镜像占用了容器启动工夫的 76%,而只有 6.4% 的工夫用来读取数据。因而,反对 On-demand Read 技术的镜像,曾经成为默认的潮流风向。Google 提出的 stargz 格局,其全称是 Seekable tar.gz,顾名思义,能够有选择地从存档中搜查并提取特定的文件,无需扫描或者解压整个镜像。stargz 旨在进步镜像拉取的性能,其提早拉取技术(lazy-pull)不会拉取整个镜像文件,实现了按需读取。为了进一步提高运行时效率,stargz 又推出了一个 containerd 的 snapshotter 插件,在存储层面对 I/O 做了进一步优化。 ...

April 7, 2021 · 2 min · jiezi

关于docker:本地使用Docker部署kafka

本地Kafka部署教程工作目录mkdir onlineinternship cd onlineinternship 筹备docker-composeKAFKA_ADVERTISED_LISTENERS 为客户端调用kafka时应用的端口 能够是localhost(也就是127.0.0.1),也能够是本机局域网IP等 docker-compose.yml """ version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: "2181:2181"kafka: image: wurstmeister/kafka ports: "9092:9092"environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_LISTENERS: PLAINTEXT://:9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: /var/run/docker.sock:/var/run/docker.sock""" 执行 """ docker-compose up -d docker ps """ 如果看到两个容器onlineinternship_kafka_1, onlineinternship_zookeeper_1 阐明胜利了 create topic""" docker exec onlineinternship_kafka_1 kafka-topics.sh --create --topic test --partitions 1 --zookeeper zookeeper:2181 --replication-factor 1 """ topic list""" docker exec onlineinternship_kafka_1 kafka-topics.sh --list --zookeeper zookeeper:2181 """ 如果看到test阐明胜利了 consume""" docker exec -it onlineinternship_kafka_1 ...

April 4, 2021 · 1 min · jiezi

关于docker:docker学习日记

教程:https://www.runoob.com/docker...http://www.dockerinfo.net/doc... 1: 装置:1.1:装置所需的软件包yum install -y yum-utils device-mapper-persistent-data lvm2 1.2:设置稳固的仓库yum-config-manager --add-repo http://mirrors.aliyun.com/doc... 1.3:装置最新版本yum install docker-ce docker-ce-cli containerd.io如果不装置社区版本,能够间接执行:yum install docker 1.4:装置特定版本1.4.1:列出并排序您存储库中可用的版本yum list docker-ce --showduplicates | sort -r 1.4.2:通过其残缺的软件包名称装置特定版本。该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)始终到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 1.5:镜像仓库配置在 /etc/docker/daemon.json中写入如下内容{ "registry-mirrors": ["https://lfxql9az.mirror.aliyuncs.com"]} 而后重新启动服务: systemctl daemon-reloadsystemctl restart docker1.6:docker0端口批改默认IP: docker服务启动后,会默认起用docker0这个IP,该IP的默认地址是172.17.0.1。批改默认IP的办法是在/etc/docker/daemon.json中写入如下内容 {"bip":"192.168.100.1/24"} 1.7:搜寻镜像: docker search -f stars=10 java (搜寻珍藏数量大于10的java镜像)镜像官网地址:https://hub.docker.com 1.8:运行镜像:docker run -itd --name yourname -p 80:80 imagename:tag其中:-d示意后盾运行--name 是给运行的容器命名-p 表是进行端口映射,冒号后面的端口是宿主机端口,冒号前面的端口是容器端口 1.9:创立镜像在Dockerfile 创立好之后,执行上面的命令能够创立镜像。docker build -t imagename:tag . Dockerfile例子:FROM javaRUN mkdir -p /home/apps/run/ && mkdir -p /home/logs/run/COPY ./src/xxx/target/xxx.jar /home/apps/run/WORKDIR /home/apps/run/CMD java -jar xxx.jar ...

March 31, 2021 · 1 min · jiezi

关于docker:docker学习笔记基础命令

根底命令docker imagedocker image ls 查看本地有哪些镜像docker image inspect 能够晓得构建这个镜像的过程dockers image pull 从近程仓库拉镜像docker image push 从近程仓库上传镜像docker image tag source[:tag] target[:tag] 标记本地的镜像,具体成果能够看下图docker image save 保留镜像,对于docker须要从一台机器迁徙到另外一台机器时比拟有用如下图所示,应用-o参数将镜像保留到文件中 docker image load 加载镜像,将上文的centos.tar.gz镜像文件load到本地,作为一个镜像;还是输入本次load的镜像名和tag dockers image rm (docker rmi) 删除镜像,删除镜像时须要指定镜像的image id,如果正在被应用的镜像,将不被容许删除docker image prune 删除没有被用到的镜像docker image build 依据dockerfile构建镜像,后续会专门一章用来解说dockerfile docker containerdocker run 运行一个容器,具体成果和解析如下图-e 为容器设置环境变量-v hostdir:dockerDir 将主机的目录映射到docker中--name 为容器命名-itd 这是是3个参数,经常同时用到,示意-d示意后盾运行-u 以某个用户进入容器-p hostport:dockerport 映射宿主机的端口到docker容器的端口 docker exec container\_id command 进入一个容器罕用的命令是docker exec -it 000c9de4532e0e6f /bin/bash docker ps 查看正在运行的容器docker container ls 查看本地的容器,与docker ps -a作用雷同同时创立容器时还能够指定cpu,内存,ip等零碎参数,具体应用办法能够通过help理解其用法 docker login(logout) 登入登出近程仓库,push镜像时须要用到docker stop/start/stats 容器的启停,查看状态docker search 从docker hub上查找镜像docker commit 依据容器构建一个镜像, ...

March 30, 2021 · 1 min · jiezi

关于docker:dockerce如何在centos上安装

如何通过yum装置docker并正确启动。装置yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce -y启动systemctl start dockersystemctl enable docker本地连接vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock近程连贯vi /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376

March 30, 2021 · 1 min · jiezi

关于docker:Docker八Docker-之-Docker-Compose

人生有涯,学海无涯简介Compose 我的项目是 Docker 官网的开源我的项目,负责实现对 Docker 容器集群的疾速编排。从性能上看,跟 OpenStack 中的 Heat 非常相似。 其代码目前在 https://github.com/docker/com... 上开源。 通过后面文章的介绍,咱们晓得应用一个 Dockerfile 模板文件,能够让用户很不便的定义一个独自的利用容器。然而,在日常工作中,常常会碰到须要多个容器相互配合来实现某项工作的状况。例如要实现一个 Web 我的项目,除了 Web 服务容器自身,往往还须要再加上后端的数据库服务容器,甚至还包含负载平衡容器等。 Docker Compose介绍通过 Docker-Compose 用户能够很容易地用一个配置文件定义一个多容器的利用,而后应用一条指令装置这个利用的所有依赖,实现构建。Docker-Compose 解决了容器与容器之间如何治理编排的问题。 Docker Compose 工作原理图 Compose 中有两个重要的概念: 服务 (service):一个利用的容器,实际上能够包含若干运行雷同镜像的容器实例。我的项目 (project):由一组关联的利用容器组成的一个残缺业务单元,在 docker-compose.yml 文件中定义。Compose 的默认治理对象是我的项目,通过子命令对我的项目中的一组容器进行便捷地生命周期治理。 Compose 我的项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行治理。因而,只有所操作的平台反对 Docker API,就能够在其上利用 Compose 来进行编排治理。 Docker Compose装置官网文档:https://docs.docker.com/compo... 一、下载Docker Compose:Docker Compose 寄存在Git Hub,不太稳固。 你能够也通过执行上面的命令,高速装置Docker Compose。 执行命令curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose [root@jiangwang ~]# curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed100 423 100 423 0 0 266 0 0:00:01 0:00:01 --:--:-- 266100 16.7M 100 16.7M 0 0 3797k 0 0:00:04 0:00:04 --:--:-- 6159k[root@jiangwang ~]# cd /[root@jiangwang /]# cd usr/local/bin/[root@jiangwang bin]# lltotal 17932-rwxr-xr-x 1 root root 388 Apr 26 2020 chardetect-rwxr-xr-x 1 root root 396 Apr 26 2020 cloud-id-rwxr-xr-x 1 root root 400 Apr 26 2020 cloud-init-rwxr-xr-x 1 root root 2108 Apr 26 2020 cloud-init-per-rw-r--r-- 1 root root 17586312 Mar 19 09:33 docker-compose-rwxr-xr-x 1 root root 404 Apr 26 2020 easy_install-rwxr-xr-x 1 root root 234 Apr 26 2020 easy_install-3.6-rwxr-xr-x 1 root root 412 Apr 26 2020 easy_install-3.8-rwxr-xr-x 1 root root 1758 Mar 7 18:40 jemalloc-config-rwxr-xr-x 1 root root 145 Mar 7 18:40 jemalloc.sh-rwxr-xr-x 1 root root 179069 Mar 7 18:40 jeprof-rwxr-xr-x 1 root root 1003 Apr 26 2020 jsondiff-rwxr-xr-x 1 root root 3661 Apr 26 2020 jsonpatch-rwxr-xr-x 1 root root 1837 Apr 26 2020 jsonpointer-rwxr-xr-x 1 root root 397 Apr 26 2020 jsonschema-rwxr-xr-x 1 root root 1461 Jun 14 2017 libmcrypt-configlrwxrwxrwx 1 root root 12 Mar 7 18:41 luajit -> luajit-2.0.4-rwxr-xr-x 1 root root 449296 Mar 7 18:41 luajit-2.0.4-rwxr-xr-x 1 root root 83224 Jun 14 2017 mcryptlrwxrwxrwx 1 root root 6 Mar 7 18:39 mdecrypt -> mcrypt[root@jiangwang bin]# 二、受权# 受权[root@jiangwang bin]# sudo chmod +x docker-compose# 查看docker compose 是否装置胜利[root@jiangwang bin]# docker-compose versiondocker-compose version 1.25.5, build 8a1c60f6docker-py version: 4.1.0CPython version: 3.7.5OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019# 呈现以上信息,表明 docker-compose 装置胜利三、疾速上手咱们以官网上的简略示例来看看 docker compose 的应用办法。 ...

March 30, 2021 · 6 min · jiezi

关于docker:Docker-的基本容器命令

docker run --help # 启动命令的应用帮忙运行容器 docker run centos /bin/bash # 从镜像启动一个容器docker run --name my_centos centos # 调配一个命名docker run -d centos # 在后盾运行容器并打印出容器IDdocker run -it centos /bin/bash # 应用交互方式运行并进入容器docker run -dit centos /bin/bash # 应用交互方式在后盾运行容器,避免容器运行实现后没有前台过程主动退出退出容器 exit # 退出并进行容器Ctrl+P+Q # 退出但不进行容器删除容器 docker rm container_id # 删除已进行的指定容器docker rm -f container_id # 强制删除指定容器docker container rm container_name # 删除指定容器docker rm -f $(docker ps -aq) # 删除全副容器docker ps -aq|xargs docker rm # 删除全副容器启动和进行容器 docker start container_id # 启动指定容器docker restart container_id # 重启指定容器docker stop container_id # 进行指定容器docker container stop container_name # 进行指定容器docker kill container_id # 强制进行指定容器查看容器 ...

March 29, 2021 · 1 min · jiezi

关于docker:Docker-的镜像命令

查看镜像 docker images # 查看本地的所有镜像(仓库源、标签、ID、创立工夫、大小等信息)docker image ls # 同上docker images -a # 查看本地的所有镜像,包含两头镜像(默认暗藏两头镜像)docker images -q # 查看本地的所有镜像,只显示ID搜寻镜像 docker search mysql # 搜寻镜像docker search mysql --filter=STARS=3000 # 搜寻镜像,应用STARS过滤下载镜像 docker pull mysql # 下载镜像,默认latestdocker pull mysql:latest # 同上docker pull docker.io/library/mysql:latest # 通过实在地址下载镜像docker pull mysql:5.7 # 下载镜像,指定版本删除镜像 docker rmi -f image_id # 删除指定镜像docker rmi -f image_id image_id # 删除多个指定镜像docker rmi -f $(docker images -aq) # 删除全副镜像

March 29, 2021 · 1 min · jiezi

关于docker:Docker七使用-Docker-部署-Spring-Boot

人生有涯,学海无涯创立一个简略的springboot我的项目一、在 pom.xml 中 ,应用 Spring Boot 2.2.10 相干依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.10.RELEASE</version></parent>二、增加 web 和测试依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency></dependencies>三、创立一个 DockerController,在其中有一个hello()办法,拜访时返回:hello,nihao@RestControllerpublic class DockerController { @RequestMapping("/hello") public String hello() { return "hello,nihao"; }}四、启动类@SpringBootApplicationpublic class DockerApplication { public static void main(String[] args) { SpringApplication.run(DockerApplication.class, args); }}增加结束后启动我的项目,启动胜利后浏览器拜访:http://localhost:8080/hello,页面返回:hello,nihao,阐明 Spring Boot 我的项目配置失常。 应用 Docker 部署 Spring Boot 我的项目一、将我的项目打成jar包,拷贝到服务器上,测试一下[root@jiangwang springbootDemo]# lsdemo-0.0.1-SNAPSHOT.jar Dockerfile[root@jiangwang springbootDemo]# java -jar demo-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.10.RELEASE)2021-03-18 14:49:18.241 INFO 12886 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication v0.0.1-SNAPSHOT on jiangwang with PID 12886 (/home/springbootDemo/demo-0.0.1-SNAPSHOT.jar started by root in /home/springbootDemo)2021-03-18 14:49:18.244 INFO 12886 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default2021-03-18 14:49:19.924 INFO 12886 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)2021-03-18 14:49:19.938 INFO 12886 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2021-03-18 14:49:19.938 INFO 12886 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.38]2021-03-18 14:49:20.013 INFO 12886 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2021-03-18 14:49:20.014 INFO 12886 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1657 ms2021-03-18 14:49:20.321 INFO 12886 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'2021-03-18 14:49:20.520 INFO 12886 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2021-03-18 14:49:20.523 INFO 12886 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 2.899 seconds (JVM running for 3.369)二、看到 Spring Boot 的启动日志后表明环境配置没有问题,编辑Dockerfile文件:FROM java:8COPY *.jar /app.jarCMD ["--server.port=8080"]EXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]三、接下来咱们应用 Dockerfile 构建镜像:## 构建镜像[root@jiangwang springbootDemo]# docker build -t springboot-demo .Sending build context to Docker daemon 17.72MBStep 1/5 : FROM java:8 ---> d23bdf5b1b1bStep 2/5 : COPY *.jar /app.jar ---> f4d6aeabd3f0Step 3/5 : CMD ["--server.port=8080"] ---> Running in a6311f7cf7b5Removing intermediate container a6311f7cf7b5 ---> d8117b10cefaStep 4/5 : EXPOSE 8080 ---> Running in ae180be637bbRemoving intermediate container ae180be637bb ---> f16702c75ab6Step 5/5 : ENTRYPOINT ["java","-jar","/app.jar"] ---> Running in fafa00625666Removing intermediate container fafa00625666 ---> d4c3e225699dSuccessfully built d4c3e225699dSuccessfully tagged springboot-demo:latest四、运行镜像:# 运行镜像[root@jiangwang springbootDemo]# docker run -d -p 39005:8080 --name my-springboot springboot-demo7ac35852cb91cb10612cd28fdbe7c50c7c59df4cccf19b2f1d30dcabbfe501f4[root@jiangwang springbootDemo]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES7ac35852cb91 springboot-demo "java -jar /app.jar …" 33 seconds ago Up 32 seconds 0.0.0.0:39005->8080/tcp my-springboot[root@jiangwang springbootDemo]# curl localhost:39005/hellohello,nihao[root@jiangwang springbootDemo]# 五、浏览器输出外网网址拜访一下:这里你的外网39005端口首先要凋谢了,能够去平安组设置 ...

March 29, 2021 · 2 min · jiezi

关于docker:Mac-Apple-Silicon-安装-Docker

写于2021年3月苹果自研芯片的不宜通过brew装置docker,因为这样装置docker可能无奈适配苹果芯片。 Docker有专门为苹果芯片开发的pre-release版本: https://docs.docker.com/docke... 点击Download即可

March 28, 2021 · 1 min · jiezi

关于docker:Docker六DockerFile构建镜像

人生有涯,学海无涯首先通过一张图来理解 Docker 镜像、容器和 Dockerfile 三者之间的关系。 通过上图能够看出应用 Dockerfile 定义镜像,运行镜像启动容器。 Dockerfile 概念Docker 镜像是一个非凡的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还蕴含了一些为运行时筹备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不蕴含任何动态数据,其内容在构建之后也不会被扭转。 镜像的定制实际上就是定制每一层所增加的配置、文件。如果咱们能够把每一层批改、装置、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无奈反复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。 Dockerfile 是一个文本文件,其内蕴含了一条条的指令(Instruction),每一条指令构建一层,因而每一条指令的内容,就是形容该层该当如何构建。有了 Dockerfile,当咱们须要定制本人额定的需要时,只需在 Dockerfile 上增加或者批改指令,从新生成 image 即可,省去了敲命令的麻烦。 DockerFile的指令1、FROM 指定根底镜像FROM 指令用于指定其后构建新镜像所应用的根底镜像。FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个根底镜像。 FROM语法格局为: FROM <image>FROM <image>:<tag>FROM <image>:<digest>通过 FROM 指定的镜像,能够是任何无效的根底镜像。FROM 有以下限度: FROM 必须 是 Dockerfile 中第一条非正文命令在一个 Dockerfile 文件中创立多个镜像时,FROM 能够屡次呈现。只需在每个新命令 FROM 之前,记录提交上次的镜像 ID。tag 或 digest 是可选的,如果不应用这两个值时,会应用 latest 版本的根底镜像2、RUN 执行命令在镜像的构建过程中执行特定的命令,并生成一个两头镜像。 #shell格局RUN <command>#exec格局RUN ["executable", "param1", "param2"]RUN 命令将在以后 image 中执行任意非法命令并提交执行后果。命令执行提交后,就会主动执行 Dockerfile 中的下一个指令。层级 RUN 指令和生成提交是合乎 Docker 核心理念的做法。它容许像版本控制那样,在任意一个点,对 image 镜像进行定制化构建。RUN 指令创立的两头镜像会被缓存,并会在下次构建中应用。如果不想应用这些缓存镜像,能够在构建时指定 --no-cache 参数,如:docker build --no-cache。3、COPY 复制文件COPY <源门路>... <指标门路>COPY ["<源门路1>",... "<指标门路>"]和 RUN 指令一样,也有两种格局,一种相似于命令行,一种相似于函数调用。COPY 指令将从构建上下文目录中 <源门路> 的文件/目录复制到新的一层的镜像内的<指标门路>地位。比方: ...

March 27, 2021 · 6 min · jiezi

关于docker:Docker五数据卷的使用

人生有涯,学海无涯介绍数据卷 是一个可供一个或多个容器应用的非凡目录,它绕过 UFS,能够提供很多有用的个性: 数据卷 能够在容器之间共享和重用对 数据卷 的批改会立马失效对 数据卷 的更新,不会影响镜像数据卷 默认会始终存在,即便容器被删除留神:数据卷 的应用,相似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。创立一个数据卷[root@jiangwang /]# docker volume create my-webmy-web查看所有的 数据卷 [root@jiangwang /]# docker volume lsDRIVER VOLUME NAMElocal my-web在主机里应用以下命令能够查看指定 数据卷 的信息 [root@jiangwang /]# docker volume inspect my-web[ { "CreatedAt": "2021-03-10T14:53:42+08:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/my-web/_data", "Name": "my-web", "Options": {}, "Scope": "local" }]挂载一个主机目录作为数据卷# 在主机的 home 目录下新建一个文件夹 test# 命令 docker run -it -v 主机目录:容器内目录# 将主机上的home文件夹上面的test的文件夹与容器内的home文件夹绑定[root@jiangwang home]# docker run -it -v /home/test:/home centos /bin/bash [root@3cf5fe5b9f86 /]# cd /home/ # 容器内的 home 文件夹[root@3cf5fe5b9f86 home]# ls[root@3cf5fe5b9f86 home]# [root@jiangwang home]# lsf2 f3 jiangwang test test.java www[root@jiangwang home]# cd test # 主机上的home文件夹上面的test的文件夹 [root@jiangwang test]# ls[root@jiangwang test]# 当初,在容器内的 home 文件夹上面创立一个test.java文件 ,而后在主机的/home/test/文件夹上面查看一下是否有test.java文件,如下图,的确实现了同步机制,容器内的数据与主机实现了同步。 ...

March 26, 2021 · 1 min · jiezi

关于docker:Docker三Docker部署Nginx和Tomcat

人生有涯,学海无涯一、Docker装置Nginx# 1、搜寻 nginx[root@jiangwang home]# docker search nginxNAME DESCRIPTION STARS nginx Official build of Nginx. 14539 jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1981 richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 809 jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 158 linuxserver/nginx An Nginx container, brought to you by LinuxS… 142 tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 115 jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 97 bitnami/nginx Bitnami nginx Docker Image 94 alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 89 jasonrivers/nginx-rtmp Docker images to host RTMP streams using NGI… 88 nginxdemos/hello NGINX webserver that serves a simple page co… 67 nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 49 privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 48 nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 31 schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 19 staticfloat/nginx-certbot Opinionated setup for automatic TLS certs lo… 19 nginx/nginx-prometheus-exporter NGINX Prometheus Exporter 16 centos/nginx-112-centos7 Platform for running nginx 1.12 or building … 15 centos/nginx-18-centos7 Platform for running nginx 1.8 or building n… 13 flashspys/nginx-static Super Lightweight Nginx Image 9 bitwarden/nginx The Bitwarden nginx web server acting as a r… 9 bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 8 mailu/nginx Mailu nginx frontend 8 ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 2 wodby/nginx Generic nginx # 2、下载 nginx 镜像[root@jiangwang home]# docker pull nginxUsing default tag: latestlatest: Pulling from library/nginxa076a628af6f: Pull complete 0732ab25fa22: Pull complete d7f36f6fe38f: Pull complete f72584a26f32: Pull complete 7125e4df9063: Pull complete Digest: sha256:10b8cc432d56da8b61b070f4c7d2543a9ed17c2b23010b43af434fd40e2ca4aaStatus: Downloaded newer image for nginx:latestdocker.io/library/nginx:latest# 3、启动nginx# -d 后盾启动# --name 给容器命名# -p 宿主机端口:容器端口[root@jiangwang home]# docker run -d --name nginx01 -p 3344:80 nginx0692aec62ba9f2487653629280becb8bcb915605faee12ee3bd3b8d5de148c32[root@jiangwang home]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0692aec62ba9 nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:3344->80/tcp nginx01# 本地拜访一下试试[root@jiangwang home]# curl localhost:3344<!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 andworking. 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>[root@jiangwang home]# # 进入容器[root@jiangwang home]# docker exec -it nginx01 /bin/bashroot@0692aec62ba9:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginxroot@0692aec62ba9:/# cd /etc/nginxroot@0692aec62ba9:/etc/nginx# lsconf.d koi-utf mime.types nginx.conf uwsgi_paramsfastcgi_params koi-win modules scgi_params win-utfroot@0692aec62ba9:/etc/nginx# # 进行容器的运行root@0692aec62ba9:/etc/nginx# exit # 退出容器exit[root@jiangwang home]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES0692aec62ba9 nginx "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 0.0.0.0:3344->80/tcp nginx01[root@jiangwang home]# docker stop 0692aec62ba9 # 进行容器0692aec62ba9在浏览器上用公网拜访一下,测试看看,后果也是能够拜访到的,这外面前提是你的3344端口号曾经开发了,只有是开发的端口号都能够进行测试。 ...

March 24, 2021 · 4 min · jiezi

关于docker:Docker二Docker常用命令

人生有涯,学海无涯一、帮忙命令docker version # 显示docker版本信息docker info # 显示docker零碎信息,包含镜像和容器数量docker 命令 --help # 帮忙信息帮忙文档:https://docs.docker.com/engin... 二、镜像命令帮忙文档:https://docs.docker.com/engin... docker images 查看所有本地的主机上的镜像 [root@jiangwang /]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest d1165f221234 3 days ago 13.3kB# 解释REPOSITORY 镜像的仓库源TAG 镜像的标签IMAGE ID 镜像的idCREATED 镜像的创立工夫SIZE 镜像的大小# 可选项 -a, --all # 列出所有的镜像 -q, --quiet # 只显示id [root@jiangwang /]# docker images -aREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest d1165f221234 3 days ago 13.3kB[root@jiangwang /]# docker images -qd1165f221234[root@jiangwang /]# docker images -aqd1165f221234[root@jiangwang /]# docker search 搜寻镜像 ...

March 24, 2021 · 4 min · jiezi

关于docker:Docker一Docker入门教程

人生有涯,学海无涯前言现在Docker的应用曾经十分广泛,特地在一线互联网公司。应用Docker技术能够帮忙企业疾速程度扩大服务,从而达到弹性部署业务的能力。在云服务概念衰亡之后,Docker的应用场景和范畴进一步倒退,现在在微服务架构越来越风行的状况下,微服务+Docker的完满组合,更加不便微服务架构运维部署落地。 在理解Docker之前咱们先思考几个问题:1、Docker是什么?2、为什么要应用Docker,它有什么劣势? 什么是Docker?Docker 属于 Linux 容器的一种封装,提供简略易用的容器应用接口。它是目前最风行的 Linux 容器解决方案。 Docker 将应用程序与该程序的依赖,打包在一个文件外面。运行这个文件,就会生成一个虚构容器。程序在这个虚构容器里运行,就如同在实在的物理机上运行一样。有了 Docker,就不必放心环境问题。 总体来说,Docker 的接口相当简略,用户能够不便地创立和应用容器,把本人的利用放入容器。容器还能够进行版本治理、复制、分享、批改,就像治理一般的代码一样。 为什么要应用Docker1、更疾速的交付和部署 对开发和运维(devop)人员来说,最心愿的就是一次创立或配置,能够在任意中央失常运行。 开发者能够应用一个规范的镜像来构建一套开发容器,开发实现之后,运维人员能够间接应用这个容器来部署代码。 Docker 能够疾速创立容器,疾速迭代应用程序,并让整个过程全程可见,使团队中的其余成员更容易了解应用程序是如何创立和工作的。 Docker 容器很轻很快!容器的启动工夫是秒级的,大量地节约开发、测试、部署的工夫。 2、更高效的虚拟化 Docker 容器的运行不须要额定的 hypervisor 反对,它是内核级的虚拟化,因而能够实现更高的性能和效率。 3、更轻松的迁徙和扩大 Docker 容器简直能够在任意的平台上运行,包含物理机、虚拟机、私有云、公有云、个人电脑、服务器等。 这种兼容性能够让用户把一个应用程序从一个平台间接迁徙到另外一个。 4、更简略的治理 应用 Docker,只须要小小的批改,就能够代替以往大量的更新工作。所有的批改都以增量的形式被散发和更新,从而实现自动化并且高效的治理。 Docker vs VM从下图能够看出,VM是一个运行在宿主机之上的残缺的操作系统,VM运行本身操作系统会占用较多的CPU、内存、硬盘资源。Docker不同于VM,只蕴含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内实现。因为Docker轻量、资源占用少,使得Docker能够轻易的利用到构建标准化的利用中。但Docker目前还不够欠缺,比方隔离成果不如VM,共享宿主机操作系统的一些根底库等;网络配置性能绝对简略,次要以桥接形式为主;查看日志也不够不便灵便。 Docker 在容器的根底上,进行了进一步的封装,从文件系统、网络互联到过程隔离等等,极大的简化了容器的创立和保护。使得 Docker 技术比虚拟机技术更为轻便、快捷。 作为一种新兴的虚拟化形式,Docker 跟传统的虚拟化形式相比具备泛滥的劣势。Docker 容器的启动能够在秒级实现,这相比传统的虚拟机形式要快得多;Docker 对系统资源的利用率很高,一台主机上能够同时运行数千个 Docker 容器。 相干概念Docker是CS架构,次要有两个概念: Docker daemon: 运行在宿主机上,Docker守护过程,用户通过Docker client(Docker命令)与Docker daemon交互Docker client: Docker 命令行工具,是用户应用Docker的次要形式,Docker client与Docker daemon通信并将后果返回给用户,Docker client也能够通过socket或者RESTful api拜访近程的Docker daemon 理解了Docker的组成,再来理解一下Docker的三个次要概念: Docker image:镜像是只读的,镜像中蕴含有须要运行的文件。镜像用来创立container,一个镜像能够运行多个container;镜像能够通过Dockerfile创立,也能够从Docker hub/registry上下载。Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保障容器中的程序运行在一个绝对平安的环境中。Docker hub/registry: 共享和治理Docker镜像,用户能够上传或者下载下面的镜像,官网地址为https://registry.hub.docker.com/,也能够搭建本人公有的Docker registry。镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的中央。 ...

March 19, 2021 · 2 min · jiezi

关于docker:96-使用Tectonic在本地搭建多节点K8S集群

应用Tectonic搭建K8S集群# 这种应用形式已被废除,波及到的资源曾经在官网无奈下载# 通过老师提供的安装包 https://gitlab-demo.com/xiaoquwl/docker-k8s-devops/tree/master/chapter9/tectonic-sandbox-1.7.5-tectonic.1 来装置遇到了各种坑。。。。。https://coreos.com/tectonic/docs/latest/tutorials/sandbox/install.html有须要的能够应用Kubeadm:https://www.imooc.com/article... 获取集群列表kubectl config get-clustersNAMEminikube如果咱们想通过kubectl治理多个集群,能够将多个集群的config文件合并到~/.kube/config文件中 对于config合并的规定:https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/contexts 操作获取以后的contexts kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE* minikube minikube minikube  vagrant    vagrant    kubelet切换contexts kubectl config use-context vagrant查看contexts kubectl config get-contextsCURRENT NAME CLUSTER AUTHINFO NAMESPACE  minikube minikube minikube* vagrant vagrant kubelet

March 16, 2021 · 1 min · jiezi

关于docker:95-Deployment

Deployment新建一个pod_nginx.yml apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.12.2 ports: - containerPort: 80而后执行如下命令,即可实现创立 kubectl create -f pod_nginx.yml查看 kubectl get deployment -o wideNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTORnginx-deployment 3 3 3 0 3m nginx nginx:1.12.2 app=nginxkubectl get rsNAME DESIRED CURRENT READY AGEnginx-deployment-7498dc98f8 3 3 0 2mkubectl get podsNAME READY STATUS RESTARTS AGEnginx-deployment-7498dc98f8-5687w 0/1 ContainerCreating 0 2mnginx-deployment-7498dc98f8-f2lbx 0/1 ContainerCreating 0 2mnginx-deployment-7498dc98f8-f8zwj 0/1 ContainerCreating 0 2m降级image ...

March 16, 2021 · 2 min · jiezi

关于docker:94-ReplicaSet和ReplicationController

ReplicationController新建一个pod_nginx.yml apiVersion: v1kind: ReplicationControllermetadata: name: nginxspec: replicas: 3 selector: app: nginx template: metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80而后运行如下 kubectl create -f pod_nginx.ymlkubectl get rcNAMEDESIREDCURRENTREADYAGEnginx3334mkubectl get podsNAMEREADYSTATUSRESTARTSAGEnginx-89s9p1/1Running06mnginx-8bjnb1/1Running06mnginx-h49m51/1Running06mkubectl delete pods nginx-89s9pkubectl get podsNAME READY STATUS RESTARTS AGEnginx-2mvs9 0/1 ContainerCreating 0 <invalid>nginx-89s9p 0/1 Terminating 0 9mnginx-8bjnb 1/1 Running 0 9mnginx-h49m5 1/1 Running 0 9m当咱们删掉一个pod的时候,kube会主动帮咱们创立另一个pod,从而达到动静的均衡 # 动静批改pod数量kubectl scale rc nginx --replicas=2ReplicaSet新建一个pod_nginx.yml apiVersion: apps/v1kind: ReplicaSetmetadata: name: nginx labels: tier: frontendspec: replicas: 3 selector: matchLabels: tier: frontend template: metadata: name: nginx labels: tier: frontend spec: containers: - name: nginx image: nginx ports: - containerPort: 80执行 ...

March 16, 2021 · 1 min · jiezi

关于k8s:93-K8S最小调度单位Pod

与container的关系一个Pod能够蕴含一个或多个container Pod治理新建一个pod_nginx.yml文件 apiVersion: v1kind: Podmetadata: name: nginx labels: app: nginxspec: containers: - name: nginx image: nginx ports: - containerPort: 80创立# 如果装置失败或者挂起,可通过kubectl describe pods查看错误信息。 kubectl create -f pod_nginx.ymlkubectl get podsNAMEREADYSTATUSRESTARTSAGEnginx1/1Running02h过后装置过程中遇到的错误信息如下: Warning FailedCreatePodSandBox 11s kubelet, minikube Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause-amd64:3.1": Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)尝试着间接在宿主机的iterm2上执行如下语句 docker pull k8s.gcr.io/pause-amd64:3.1的确失败了,因而狐疑k8s.gcr.io被墙了。 ...

March 16, 2021 · 1 min · jiezi

关于docker:92-Minikube快速搭建K8S单节点环境

https://github.com/kubernetes/minikubeMinikube也是须要虚拟化工具来反对的,例如VirtualBox Mac零碎上装置依赖kubectl heartide@mac> kubectl versionClient Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.5", GitCommit:"32ac1c9073b132b8ba18aa830f46b77dcceb0723", GitTreeState:"clean", BuildDate:"2018-06-22T05:40:13Z", GoVersion:"go1.9.7", Compiler:"gc", Platform:"darwin/amd64"}Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-04-10T12:46:31Z", GoVersion:"go1.9.4", Compiler:"gc", Platform:"linux/amd64"}装置minikube # 下载brew cask install minikube# 查看版本heartide@mac> minikube versionminikube version: v0.28.0装完0.28.0之后,执行后续的minikube start总是失败,详见:https://coding.imooc.com/lear... 因而 minikube stopminikube deletebrew cask uninstall --force minikubebrew cask edit minikube#See below for file 应用上面的配置笼罩该文件brew cask install minikube配置 cask 'minikube' do  version '0.25.2'  sha256 'dc5b00c4a06e8160bd607732c9a2294598d803716e353293b4463cc2c9539eec'  # storage.googleapis.com/minikube was verified as official when first introduced to the cask  url "https://storage.googleapis.com/minikube/releases/v#{version}/minikube-darwin-amd64"  appcast 'https://github.com/kubernetes/minikube/releases.atom',          checkpoint: 'dc5b00c4a06e8160bd607732c9a2294598d803716e353293b4463cc2c9539eec'  name 'Minikube'  homepage 'https://github.com/kubernetes/minikube'  depends_on formula: 'kubernetes-cli'  container type: :naked  binary 'minikube-darwin-amd64', target: 'minikube'  zap trash: '~/.minikube'end重新安装 ...

March 16, 2021 · 1 min · jiezi

关于docker:91-Kubenetes简介

swarm与k8s的历史:https://www.imooc.com/article/23476 swarm架构 k8s架构

March 16, 2021 · 1 min · jiezi

关于docker:88-阿里云的容器服务

https://www.aliyun.com/produc...

March 16, 2021 · 1 min · jiezi

关于docker:87-Docker企业版本地安装之DTR

拜访 https://192.168.205.13/manage/settings/dtr 即可看到 Docker Trusted Registry 选项 抉择将DTR装置在worker节点而不是manager节点上设置DTR EXTERNAL URL为worker节点对应的ip:https://192.168.205.14Disable TLS verification for UCP运行主动生成的shell语句 [vagrant@docker-ee-work ~]$ docker run -it --rm docker/dtr install --dtr-external-url https://192.168.205.14 --ucp-node docker-ee-work --ucp-username admin --ucp-url https://192.168.205.13 --ucp-insecure-tls而后咱们通过如下链接就能够拜访DTR了 https://192.168.205.14/

March 16, 2021 · 1 min · jiezi

关于docker:86-Docker企业版本地安装之UCP

初始化虚拟机Vagrantfile内容如下 # -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.require_version ">= 1.6.0"boxes = [    {        :name => "docker-ee-manager",        :eth1 => "192.168.205.13",        :mem => "5120",        :cpu => "1"    },    {        :name => "docker-ee-work",        :eth1 => "192.168.205.14",        :mem => "3072",        :cpu => "1"    }]Vagrant.configure(2) do |config|  config.vm.box = "centos/7"  boxes.each do |opts|    config.vm.define opts[:name] do |config|      config.vm.hostname = opts[:name]      config.vm.provider "virtualbox" do |v|        v.customize ["modifyvm", :id, "--memory", opts[:mem]]        v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]      end      config.vm.network :private_network, ip: opts[:eth1]    end  end  config.vm.synced_folder ".", "/vagrant", :disabled => true  config.vm.provision "shell", privileged: true, path: "./setup.sh"endsetup.sh ...

March 16, 2021 · 2 min · jiezi

关于docker:85-Docker企业版的在线免费体验

形式一https://trial.docker.com/Docker 给咱们曾经搭建好的企业版在线开发环境,申请通过后能够收费应用12小时 形式二本人在阿里云上组建几台虚拟主机,而后装置Docker企业版,申请通过后License能够用1个月

March 16, 2021 · 1 min · jiezi

关于docker:84-Docker-Cloud之持续集成和持续部署

如果在docker cloud上绑定了AWS或者Azure之后,会有一个Launch Service选项 点击之后,在页面上勾选AUTODEPLOY,就能够在image有更新之后,就主动部署了

March 16, 2021 · 1 min · jiezi

关于docker:83-Docker-Cloud之自动-Build

https://cloud.docker.com/在github上新建一个organization,防止受权所有我的项目,职责清晰在docker cloud上创立一个organization,关联上github的organization,而后新建一个RepositoriesRepositories的Builds配置一栏抉择Configure Automated Builds,而后抉择github上对应的Repositories,在BUILD RULES上勾销Build Caching如果咱们想build出版本号,能够在BUILD RULES上增加一条Tag规定之后,咱们往github上push都能够让docker cloud主动帮咱们build image了

March 16, 2021 · 1 min · jiezi

关于docker:82-Docker-Cloud简介

提供容器的治理、编排和部署的托管服务 次要模块 关联云服务商aws、Azure增加节点作为Docker Host创立Service创立StackImage治理两种运行模式 Standard模式,一个Node就是一个Docker HostSwarm模式,多个Node组成Swarm Cluster

March 16, 2021 · 1 min · jiezi

关于docker:81-Docker的收费模式

Docker企业版技能培训技能认证Docker Store,付费镜像抽成Docker Cloud,依据docker-compose.yml,在线部署

March 16, 2021 · 1 min · jiezi

关于docker:710-Service更新

我的项目初始化# 在swarm-manager节点上docker network create -d overlay demodocker service create --name web -p 8080:5000 --network demo xiaopeng163/python-flask-demo:1.0docker service scale web=3继续拜访,模仿热更新的过程# 在swarm-work2节点上[vagrant@swarm-work2 ~]$ sh -c "while true;do curl 127.0.0.1:8080 && sleep 1;done"我的项目降级# 在swarm-manager节点上docker service update --image xiaopeng163/python-flask-demo:2.0 web继续拜访的后果从1.0逐渐地过渡到2.0 hello docker, version 1.0hello docker, version 1.0hello docker, version 1.0hello docker, version 1.0hello docker, version 1.0hello docker, version 2.0hello docker, version 1.0hello docker, version 2.0hello docker, version 1.0hello docker, version 2.0hello docker, version 1.0hello docker, version 2.0hello docker, version 1.0hello docker, version 2.0hello docker, version 1.0hello docker, version 2.0hello docker, version 1.0hello docker, version 2.0hello docker, version 1.0hello docker, version 2.0hello docker, version 2.0hello docker, version 2.0hello docker, version 2.0Docker Stack的更新在更新了docker-compose.yml之后,再次执行一次deploy指令即可 ...

March 16, 2021 · 1 min · jiezi

关于docker:79-Docker-Secret在Stack中的使用

docker-compose.ymlversion: '3.6'services: mysql: image: mysql secrets: - login-password environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/login-passwordsecrets: login-password: external: true部署docker stack deploy -c=docker-compose.yml mysql-secret

March 16, 2021 · 1 min · jiezi

关于docker:78-Docker-Secret管理和使用

创立secret基于一个含明文的文原本创立password.txt的内容如下 siguoya生成密钥 [vagrant@swarm-manager wordpress-overlay]$ docker secret create login-password password.txtk5hf3i5ghi62moakgramxeq85删除明文文件 rm -f password.txt查看密钥 [vagrant@swarm-manager wordpress-overlay]$ docker secret lsID NAME DRIVER CREATED UPDATEDk5hf3i5ghi62moakgramxeq85 login-password About a minute ago About a minute ago[vagrant@swarm-manager wordpress-overlay]$ docker secret inspect login-password[ { "ID": "k5hf3i5ghi62moakgramxeq85", "Version": { "Index": 477 }, "CreatedAt": "2018-07-05T09:24:11.316878415Z", "UpdatedAt": "2018-07-05T09:24:11.316878415Z", "Spec": { "Name": "login-password", "Labels": {} } }]应用secret# 应用--secret导入密钥docker service create --secret login-password --name busybox busybox /bin/sh -c "while true;do sleep 3600;done"# 在/run/secrets/目录能够查看到所有的密钥文件,文件内容是密钥的明文[vagrant@swarm-work1 ~]$ docker exec 900f45b51648 cat /run/secrets/login-passwordsiguoya创立一个应用docker secret的容器docker service create --name mysql --secret login-password --env MYSQL_ROOT_PASSWORD_FILE=/run/secrets/login-password mysql:5.7.22

March 16, 2021 · 1 min · jiezi

关于docker:76-Routing-Mesh之Ingress负载均衡

性能内部拜访的负载平衡服务端口被裸露到各个swarm节点外部通过IPVS进行负载平衡端口裸露# 服务列表,留神端口转发` *:8000->8000/tcp `外面的这个*号[vagrant@swarm-manager ~]$ docker service lsID NAME MODE REPLICAS IMAGE PORTSzq7ulpxk83nq busybox replicated 1/1 busybox:latestq1j2ddophtom whoami replicated 1/1 jwilder/whoami:latest *:8000->8000/tcp# 服务散布[vagrant@swarm-manager ~]$ docker service ps whoamiID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS1diq1k8h38o5 whoami.1 jwilder/whoami:latest swarm-work1 Running Running about an hour ago# 服务测试,whoami只散布在了swarm-work1这个节点上,然而咱们curl swarm-manager这个节点上的8000端口,也能失常拜访[vagrant@swarm-manager ~]$ curl 127.0.0.1:8000I'm 299a5ba408cd至于为啥能够,咱们能够看一下iptables的内容 [vagrant@swarm-manager ~]$ sudo iptables -nL -t natChain PREROUTING (policy ACCEPT)target prot opt source destinationDOCKER-INGRESS all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCALDOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destinationDOCKER-INGRESS all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCALDOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT)target prot opt source destinationMASQUERADE all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match src-type LOCALMASQUERADE all -- 172.17.0.0/16 0.0.0.0/0MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0Chain DOCKER (2 references)target prot opt source destinationRETURN all -- 0.0.0.0/0 0.0.0.0/0RETURN all -- 0.0.0.0/0 0.0.0.0/0Chain DOCKER-INGRESS (2 references)target prot opt source destinationDNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000 to:172.18.0.2:8000RETURN all -- 0.0.0.0/0 0.0.0.0/0 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000 to:172.18.0.2:8000 就是要害了 ...

March 16, 2021 · 1 min · jiezi

关于docker:75-集群服务间通信之Routing-Mesh

创立overlay网络docker network create -d overlay swarm-overlay创立whoami容器jwilder/whoami镜像反对通过http申请来获取主机的hostname docker service create --name whoami -p 8000:8000 --network swarm-overlay -d jwilder/whoami创立busybox容器docker service create --name busybox --network swarm-overlay -d busybox /bin/sh -c "while true;do sleep 3600;done"查看服务# 服务列表[vagrant@swarm-manager ~]$ docker service lsID NAME MODE REPLICAS IMAGE PORTSzq7ulpxk83nq busybox replicated 1/1 busybox:latestq1j2ddophtom whoami replicated 1/1 jwilder/whoami:latest *:8000->8000/tcp# busybox节点散布[vagrant@swarm-manager ~]$ docker service ps busyboxID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSyzquayg07i2a busybox.1 busybox:latest swarm-work2 Running Running 23 seconds ago# whoami节点散布[vagrant@swarm-manager ~]$ docker service ps whoamiID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS1diq1k8h38o5 whoami.1 jwilder/whoami:latest swarm-work1 Running Running 43 seconds ago发现busybox部署在了swarm-work2(192.168.205.12)节点上,whoami部署在了swarm-work1(192.168.205.11)节点上 ...

March 16, 2021 · 2 min · jiezi

关于docker:74-在swarm集群里通过service部署wordpress

创立一个overlay驱动的网络docker network create -d overlay wordpress[vagrant@swarm-manager ~]$ docker network lsNETWORK ID NAME DRIVER SCOPEq3rp3i79eud7 wordpress overlay swarm创立mysql容器docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress --network wordpress --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysql创立wordpressdocker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network wordpress wordpress查看节点散布# 服务列表[vagrant@swarm-manager ~]$ docker service lsID NAME MODE REPLICAS IMAGE PORTSvxz0bfmul9th mysql replicated 1/1 mysql:5.7.22cpe3wqrsoqxi wordpress replicated 1/1 wordpress:latest *:80->80/tcp# wordpress服务的节点散布[vagrant@swarm-manager ~]$ docker service ps wordpressID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTStnh4f0ldyidl wordpress.1 wordpress:latest swarm-manager Running Running 4 minutes ago# mysql服务的节点散布[vagrant@swarm-manager ~]$ docker service ps mysqlID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSjns8bllzbz94 mysql.1 mysql:5.7.22 swarm-work1 Running Running 33 minutes ago尽管 wordpress 只散布在了swarm-manager(192.168.205.10)这一个节点上,然而咱们发现应用如下链接拜访,成果都是一样的,是不是很神奇。。。具体起因详见7.6 ...

March 16, 2021 · 1 min · jiezi

关于swarm集群:73-Service的创建维护和水平扩展

创立一个service在swarm模式下,基本上就不会应用docker run了 # swarm-manager节点docker service create --name busybox busybox /bin/sh -c "while true;do sleep 3600;done"查看service列表[vagrant@swarm-manager ~]$ docker service lsIDNAMEMODEREPLICASIMAGEPORTS426kwqf7gxifbusyboxreplicated1/1busybox:latest replicated 示意此服务能够程度扩大1/1 分母示意scale的数量,分子示意running的数量程度扩大service# 程度扩大为5个docker service scale busybox=5再次查看service列表[vagrant@swarm-manager ~]$ docker service lsIDNAMEMODEREPLICASIMAGEPORTS426kwqf7gxifbusyboxreplicated5/5busybox:latest 查看service的散布docker service ps busyboxIDNAMEIMAGENODEDESIRED STATECURRENT STATEERRORPORTSgf76bj8oe9u7busybox.1busybox:latestswarm-managerRunningRunning 9 minutes ago 5htg690swaw2busybox.2busybox:latestswarm-work2RunningRunning about a minute ago b6v2qfmke4hubusybox.3busybox:latestswarm-managerRunningRunning about a minute ago ywyt6d4pf918busybox.4busybox:latestswarm-work1RunningRunning about a minute ago nutiiyw70rz2busybox.5busybox:latestswarm-work2RunningRunning about a minute ago 模仿容器down掉# swarm-work2 节点docker container stop fc23134c1f30fc23134c1f30而后咱们就能够看出scale会主动复原为5 ...

March 16, 2021 · 1 min · jiezi

关于swarm集群:72-创建一个三节点的swarm集群

Vagrantfile# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.require_version ">= 1.6.0"boxes = [ { :name => "swarm-manager", :eth1 => "192.168.205.10", :mem => "1024", :cpu => "1" }, { :name => "swarm-work1", :eth1 => "192.168.205.11", :mem => "1024", :cpu => "1" }, { :name => "swarm-work2", :eth1 => "192.168.205.12", :mem => "1024", :cpu => "1" }]Vagrant.configure(2) do |config| config.vm.box = "centos/7" boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.hostname = opts[:name] config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", opts[:mem]] v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] end config.vm.network :private_network, ip: opts[:eth1] end end config.vm.synced_folder ".", "/vagrant", :disabled => true config.vm.synced_folder "./labs", "/home/vagrant/labs", :nfs => true config.vm.provision "shell", privileged: true, path: "./setup.sh"end创立manager节点vagrant ssh swarm-managerdocker swarm init --advertise-addr=192.168.205.10Swarm initialized: current node (xk4srb722hwekv4vhkzgaq1ti) is now a manager.To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-0c8b3a47nnjzclttnhhgdnl5mhfh8qic89wvq65yuddmgw46d5-43luksaph5upfe7b7gkx9t3ss 192.168.205.10:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.创立worker节点如果报错:Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable,可能是因为有其余章节正在启动的虚拟机用了与swarm-manager雷同的ipvagrant ssh swarm-work1docker swarm join --token SWMTKN-1-0c8b3a47nnjzclttnhhgdnl5mhfh8qic89wvq65yuddmgw46d5-43luksaph5upfe7b7gkx9t3ss 192.168.205.10:2377vagrant ssh swarm-work2docker swarm join --token SWMTKN-1-0c8b3a47nnjzclttnhhgdnl5mhfh8qic89wvq65yuddmgw46d5-43luksaph5upfe7b7gkx9t3ss 192.168.205.10:2377查看节点#docker node ls只能在manager节点上执行[vagrant@swarm-manager ~]$ docker node lsID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSIONxk4srb722hwekv4vhkzgaq1ti * swarm-manager Ready Active Leader 18.05.0-ceie6azlh3y4qgyemteziufon7j swarm-work1 Ready Active 18.05.0-cewwaea67e4lbk5vn1y5r8i0uw9 swarm-work2 Ready Active 18.05.0-ce

March 16, 2021 · 1 min · jiezi

关于swarm集群:71-为什么需要容器编排

到处都应用容器带来的问题如何高效的治理如何不便的横向扩大容器down了,如何主动复原如何更新容器,而不影响业务如何监控追踪容器如何调度容器的创立如何爱护隐衷数据

March 16, 2021 · 1 min · jiezi

关于docker:使用docker-lnmp镜像包部署搭建laravel项目

下载镜像包拜访https://registry.hub.docker.c... lnmp镜像地址关上终端 docker pull 2233466866/lnmp启动docker相干配置docker run -it --privileged --name=lnmp -p 20016:80 -p 3306:3306 -v ~/www:/www -v ~/lnmp-data/env/mysqlData:/data/mysql -v ~/lnmp-data/env/nginx.conf:/usr/local/nginx/conf/nginx.conf 2233466866/lnmp阐明: ~/www 是工作目录~/lnmp-data/env/mysqlData 是数据库目录~/lnmp-data/env/nginx.conf 是nginx是配置文件20016是本地端口我的一个我的项目 目录是~/www/laravel,所以nginx.conf配置文件的内容如下: user www;worker_processes auto;worker_cpu_affinity auto;pid logs/nginx.pid;events { worker_connections 102400;}http { charset utf-8; server_tokens off; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; include mime.types; default_type application/octet-stream; client_max_body_size 20M; sendfile on; keepalive_timeout 20; gzip on; gzip_vary on; gzip_comp_level 1; gzip_types text/css application/javascript application/json image/png image/webp image/apng image/jpeg image/x-icon; error_log /www/z_error.log; access_log /www/z_$host.log main; server { listen 80; server_name www.test.com; root /www/laravel/public; index index.html index.htm index.php autoindex on; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php?$query_string; } location ~* \.php { include fastcgi_params; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }}mysql设置进入docker中 ...

March 15, 2021 · 1 min · jiezi

关于docker:62-Docker-Compose到底是什么

多容器的APP太恶心要拉取多个image要创立多个container要启动、进行、删除多个containerDocker Compose批处理Docker Compose 是一个开发环境应用的工具,通过yml来定义配置yml的version与Docker Engine的版本是对应的yml内容由services、volumes、networks三局部组成wordpress我的项目docker run -d --name mysql -v mysqldata:/var/lib/mysql -e MYSQL_DATABASE=wp -e MYSQL_ROOT_PASSWORD=root mysql:5.7.22docker run --name wordpress --link mysql -d -p 8080:80 wordpress转换 version: '3'services: wordpress: image: wordpress ports: - 8080:80 depends_on: - mysql environment: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD: root networks: - my-bridge mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: wordpress volumes: - mysql-data:/var/lib/mysql networks: - my-bridgevolumes: mysql-data:networks: my-bridge: driver: bridgeflask redis我的项目version: "3"services: redis: image: redis web: build: context: . dockerfile: Dockerfile ports: - 5000:5000 environment: REDIS_HOST: redis转换 ...

March 14, 2021 · 1 min · jiezi

关于docker:61-基于docker搭建wordpress

创立一个mysql容器docker run -d --name mysql -v mysqldata:/var/lib/mysql -e MYSQL_DATABASE=wp -e MYSQL_ROOT_PASSWORD=root mysql:5.7.22创立一个wordpress容器docker run --name wordpress --link mysql -d -p 8080:80 wordpress而后即可通过拜访 http://192.168.205.10:8080/ 来进行装置了

March 14, 2021 · 1 min · jiezi

关于docker:53-数据持久化之Bind-Mouting

应用场景:保障容器内外之间的数据同步,相当于同步盘的性能与Data Volume的区别在于,Data Volume是由内而外的、是单向的,而Bind Mouting是双向的创立一个nginx容器编写Dockerfile文件 FROM nginx:latestWORKDIR /usr/share/nginx/htmlCOPY index.html index.htmlindex.html的文件内容如下 <!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title></head><body> Hello Siguoya!</body></html>而后编译镜像、创立容器 docker build -t siguoya/nginx-bind-mounting .docker run -d --name nginx-bind-mounting -p 80:80 siguoya/nginx-bind-mounting应用如下命令即可查看到index.html的内容 curl http://127.0.0.1/但目前的nginx-bind-mounting并不能做到咱们在批改代码之后,看到更新后的成果 Bind Mouting先删除nginx-bind-mounting docker container stop nginx-bind-mounting && docker container rm nginx-bind-mounting而后从新初始化一下 docker run -d --name nginx-bind-mounting -p 80:80 -v $(pwd):/usr/share/nginx/html siguoya/nginx-bind-mounting此时进入容器执行如下操作 [vagrant@docker-node1 bind-mounting]$ docker exec -it nginx-bind-mounting /bin/sh# ls -al /usr/share/nginx/htmltotal 8drwxrwxr-x. 2 1000 1000 42 Jul 3 12:47 .drwxr-xr-x. 1 root root 18 Jun 26 23:09 ..-rw-rw-r--. 1 1000 1000 75 Jul 3 12:46 Dockerfile-rw-rw-r--. 1 1000 1000 331 Jul 3 12:47 index.html# touch test.txt# exit而后再退出容器 ...

March 14, 2021 · 1 min · jiezi

关于docker:52-数据持久化之Data-Volume

应用场景:mysql容器在被销毁之后,数据能够长久化初始化一个mysql容器# 为了便于测试,设置root明码为空docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:latest查看mysql容器对应的volumeMountpoint 的值 /var/lib/docker/volumes/5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87/_data,就是mysql容器保留数据到虚拟机的中央了 [vagrant@docker-node1 ~]$ docker volume lsDRIVER VOLUME NAMElocal 5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87[vagrant@docker-node1 ~]$ docker volume inspect 5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87[ { "CreatedAt": "2018-07-03T12:12:36Z", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87/_data", "Name": "5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87", "Options": null, "Scope": "local" }]删除mysql容器docker container stop mysql1docker container rm mysql1删除之后发现该容器对应的volume还是存在的,这也就是mysql数据的长久化了 如果是降级mysql的版本,因为volume data的存在,可能低版本的mysql不兼容,导致呈现问题,此时还须要删除volume data。命名Volume[vagrant@docker-node1 ~]$ docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:latest028c9a31c4b1bbe0ef1aa40517e881fb655d2efb81d5591460c323b320ac2e84[vagrant@docker-node1 ~]$ docker volume lsDRIVER VOLUME NAMElocal mysql[vagrant@docker-node1 ~]$ docker volume inspect mysql[ { "CreatedAt": "2018-07-03T12:25:48Z", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/mysql/_data", "Name": "mysql", "Options": null, "Scope": "local" }]长久化数据的应用进入到mysql2容器,创立一个数据库,名称为docker ...

March 14, 2021 · 1 min · jiezi

关于docker:51-Docker数据持久化

Docker数据长久化的计划基于本地文件系统的Volume,通过-v参数将本机的目录作为容器的数据卷基于Plugin的Volume,反对第三方的存储计划,例如NAS、AWS

March 14, 2021 · 1 min · jiezi

关于docker:49-Docker-Overlay网络和etcd实现多机容器通信

实现多机容器的通信,首先须要保障容器的ip在多台虚拟机中都是惟一的。以上图为例,在192.168.205.10中新建容器,就不能再呈现容器的ip为172.17.0.3了,因为这个ip曾经在192.168.205.10中存在了。 etcd装置为了保障容器在多机中的ip惟一,能够应用etcd,etcd是一个开源的、分布式的键值对数据存储系统 https://coreos.com/etcd/在docker-node1上装置etcd wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gztar zxvf etcd-v3.0.12-linux-amd64.tar.gzcd etcd-v3.0.12-linux-amd64nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://192.168.205.10:2380 --listen-peer-urls http://192.168.205.10:2380 --listen-client-urls http://192.168.205.10:2379,http://127.0.0.1:2379 --advertise-client-urls http://192.168.205.10:2379 --initial-cluster-token etcd-cluster --initial-cluster docker-node1=http://192.168.205.10:2380,docker-node2=http://192.168.205.11:2380 --initial-cluster-state new &在docker-node2上装置etcd wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gztar zxvf etcd-v3.0.12-linux-amd64.tar.gzcd etcd-v3.0.12-linux-amd64/nohup ./etcd --name docker-node2 --initial-advertise-peer-urls http://192.168.205.11:2380 --listen-peer-urls http://192.168.205.11:2380 --listen-client-urls http://192.168.205.11:2379,http://127.0.0.1:2379 --advertise-client-urls http://192.168.205.11:2379 --initial-cluster-token etcd-cluster --initial-cluster docker-node1=http://192.168.205.10:2380,docker-node2=http://192.168.205.11:2380 --initial-cluster-state new &在docker-node1或docker-node2任一主机上查看cluster运行状态 ./etcdctl cluster-healthmember 21eca106efe4caee is healthy: got healthy result from http://192.168.205.10:2379member 8614974c83d1cc6d is healthy: got healthy result from http://192.168.205.11:2379cluster is healthydocker重启应用 systemctl stop docker 命令,敞开docker服务后再应用如下形式重启docker-node1 ...

March 14, 2021 · 2 min · jiezi

关于docker:48-Overlay和Underlay的通俗解释

位于同一个虚拟机的容器,能够应用--link或者是退出自定义的bridge网络来实现网络互通 那么位于不同虚拟机的容器之间要怎么互通网络呢? 解决方案就是应用VXLAN,理解一下

March 14, 2021 · 1 min · jiezi

关于docker:47-多容器复杂应用的部署演示

应用Flask+Redis构建一个实现计数器性能的web我的项目 创立一个redis容器docker run -d --name redis redis创立一个Flask容器Dockerfile文件内容如下 FROM hub.c.163.com/library/pythonLABEL maintainer="924714558@qq.com"COPY . /appWORKDIR /appRUN pip install flask redisEXPOSE 5000CMD ["python","app.py"]Dockerfile所在的当前目录下的app.py文件内容如下 import osimport socketfrom flask import Flaskfrom redis import Redisapp = Flask(__name__)redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)@app.route('/')def hello(): redis.incr('hits') return 'hostname is %s and hits %s times' % (socket.gethostname(),redis.get('hits'))if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)而后对Dockerfile文件进行build并实例化一个容器 docker build -t siguoya/flask-redis .# --link用于flask app连贯redis数据库# -e选项用于设置容器的环境变量,在容器外部能够应用env命令来获取# REDIS_HOST的值是先前创立的redis容器的name# 5000:5000 是指虚拟主机的5000端口映射flask app我的项目启动的5000端口docker run -d --name flask-redis --link redis -e REDIS_HOST=redis -p 5000:5000 siguoya/flask-redis此时在虚拟机上执行 ...

March 14, 2021 · 1 min · jiezi

关于docker:46-容器网络之host和none

none网络创立一个name为test4的容器,network为none docker run -d --name test4 --network none busybox /bin/sh -c "while true;do sleep 3600;done"而后应用如下命令查看网络,发现test4容器没有对外的网络地址,也就意味着它是孤立的,只能通过docker exec来进行拜访了 docker network inspect none{ "Containers": { "c79d3e5d65e9c4e108ba235bcb88afcf91a0e33d757103edaf69494be5f8efef": { "Name": "test4", "EndpointID": "15d02e63a684dbb221d9499a24dd3d1af727f54411571d3aa5d18e997f985f24", "MacAddress": "", "IPv4Address": "", "IPv6Address": "" } }}[vagrant@docker-node1 ~]$ docker exec test4 ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft foreverhost网络创立一个name为test5的容器,network为host docker run -d --name test5 --network host busybox /bin/sh -c "while true;do sleep 3600;done"而后应用docker network inspect host,发现test5容器也是没有对外的网络地址的 ...

March 14, 2021 · 2 min · jiezi

关于docker:45-容器的端口映射

根底版创立一个name为web的nginx容器 docker run --name web -d nginx因为这个nginx镜像很精简,web容器外部yum、ip、curl、wget、netstat等命令都没有装置。所以测试web容器的服务是否失常运行了的话,能够尝试在内部主机上进行如下操作。 docker network lsdocker network inspect a61c325bd7ba{ "Containers": { "5b567458c87cc1c7eff73d47a753e1171c6478f2705868f01ebd858b196a2283": { "Name": "test1", "EndpointID": "e6710f0db01bdbf3669aabeab866a4f27bf1605226dd3d3c98a8b7ea1c6896f0", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }, "e1dbb7a9f30a284c080159ad82936c08e567a7160f99029fe1ab2e93b92cc4f4": { "Name": "web", "EndpointID": "4cbb7cabda70785b2244c4f99b21325b43f6115d575b83fdd5369135f6844d8d", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }}curl 172.17.0.3这个时候的web容器是只能在局域网上进行拜访的。 升级版创立一个name为web2的nginx容器 docker run --name web2 -d -p 80:80 nginx此时在vagrant虚拟主机上通过如下命令即可拜访 curl 127.0.0.1由Vagrantfile中的配置可知,咱们在宿主机上,通过如下形式也可拜访 curl 192.168.205.10

March 14, 2021 · 1 min · jiezi