失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Docker最全总结 DockerFile Docker编排容器 Docker镜像 Docker-compose构建

Docker最全总结 DockerFile Docker编排容器 Docker镜像 Docker-compose构建

时间:2020-04-06 09:47:25

相关推荐

Docker最全总结 DockerFile Docker编排容器 Docker镜像 Docker-compose构建

文章目录

Docker简介为什么使用docker:Docker引擎:Docker系统镜像:Docker容器:Docker仓库:ubuntu安装docker:ubuntu脚本自动安装:ubuntu安装镜像加速器:Centos安装Dockercentos命令安装DockerFile:DokerFile指令DockerFile轻量化方式使用上下文环境构建:Docker数据卷:查看数据卷的信息:删除数据卷:无主的数据卷的删除用以下命令清理:实例共享数据卷:Docker镜像:docker下载镜像:Docker镜像操作虚悬镜像:删除虚悬镜像:查看中间层镜像:删除指定的镜像:Docker构建tomact:Docker构建mysql:出现的错误:Docker构建oracleoracle中的sys用户和system用户的区别:Docker 容器命令操作Docker Compose:安装docker compose:安装docker:卸载docker compose:Docker Compose 使用:模板文件:Docker compose的命令的使用:Docker compose实战NginxDocker compose实战tomcat:Docker compose 实战mysql5:Docker compose 实战oracleDocker compose 实战RabbitMQDocker compose 实战RocketMqDocker compose实战Redis:Docker compose实战Redis集群:修改Sentinel文件:启动集群:查看集群是否生效:Docker compose实战FastDFSDocker compose实战Dubbo zookeeper单机模式Docker compose实战zookeeper集群 (有问题 -未解决)Docker compose实战 gitlabDocker compose实战 nexusDocker compose 实战ElasticSecarchDocker compose編排容器Docker-Registry:Docker 私服:测试镜像上传:在客户端中docker-compose中使用这个:

Docker

简介

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中, 然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

​ Docker支持将软件编译成一个镜像;然后 在镜像中各种软件做好配置,将镜像发布 出去,其他使用者可以直接使用这个镜像。运行中的这个镜像称为容器,容器启动是 非常快速的。类似windows里面的ghost操 作系统,安装好后什么都有了

为什么使用docker:

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

更快速的启动时间一致的运行环境持续交互和部署更轻松的迁移更轻松的维护和扩展

Docker引擎:

是一个包含以下主要组件的客户端服务器的应用程序

一种服务器,他是一个称为守护进程并且长时间运行的程序Rest ApI用于指定程序可以用来与守护进程通信的接口,并指示它做什么一个有命令行界面工具的客户端

Docker系统镜像:

Docker镜像(Images):Docker 镜像是用于创建Docker 容器的 模板。Docker容器(Container):容器是独立运行的一个或一组应用。Docker客户端(Client):客户端通过命令行或者其他工具使用 Docker API(/reference/api/docker_remote_api) 与Docker 的守护进程通信 docker主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。Docker仓库(Registry):Docker 仓库用来保存镜像,可以理解 为代码控制中的代码仓库。Docker Hub() 提供了庞大的镜像集合供使用

Docker容器:

Docker容器是docker运行的实体,容器可以被创建,启动,停止,删除,暂停等

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡

Docker仓库:

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

​通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

ubuntu安装docker:

命令:wget -q0- / |sh启动:sudo service docker start测试运行:docker run hello-world镜像加速: /etc/docker/daemon.json 在这里加入{ "registry-mirrors":["http://hub-mirror."]}

ubuntu安装:1.更换国内软件源,推荐中国科技大学的源,稳定速度快(可选)sudo cp /etc/apt/sources.list /etc/apt/sources.list.baksudo sed -i 's//mirrors./g'/etc/apt/sources.listsudo apt update2.安装需要的包sudo apt install apt-transport-https ca-certificates software-properties-common curl3.添加 GPG 密钥,并添加 Docker-ce 软件源,这里还是以中国科技大学的 Docker-ce 源为例curl -fsSL https://mirrors./docker-ce/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository "deb [arch=amd64] https://mirrors./docker-ce/linux/ubuntu \$添加成功后更新软件包缓存安装设置开机自启动并启动(安装成功后默认已设置并启动,可忽略)测试运行添加当前用户到用户组,可以不用运行(可选)(lsb_release -cs) stable"4.添加成功后更新软件包缓存sudo apt update5.安装 Docker-ce:::sudo apt install docker-ce6.设置开机自启动并启动 Docker-ce(安装成功后默认已设置并启动,可忽略)sudo systemctl enable dockersudo systemctl start docker7.测试运行sudo docker run hello-world8.添加当前用户到 docker 用户组,可以不用 sudo 运行 docker(可选)sudo groupadd dockersudo usermod -aG docker $USER9.测试添加用户组(可选)docker run hello-world

ubuntu脚本自动安装:

1.curl -fsSL -o get-docker.sh2.sh get-docker.sh --mirror Aliyun

​ 或者第二步使用:sudo sh get-docker.sh --mirror AzureChinaCloud3.测试是否安装成功:

docker version

ubuntu安装镜像加速器:

镜像加速: 如果没有则创建这个文件:

​ /etc/docker/daemon.json 在这里加入{ "registry-mirrors":["https://registry.docker-"]}

重启服务:

​systemctl restart docker

Centos安装Docker

centos命令安装

安装命令:yum install docker

检查是否安装成功:docker version

启动docker server:systemctl start docker.service或者systemctl start docker

设置docker开机自启:systemctl enable docker.service

安装wget命令 :yum -y install wget

搜索一些包:yum search java|grep jdk

安装vim编辑器:yum - y install vim*

检查docker状态:systemctl status docker

停止docker:systemctl stop docker

idea链接:

vim /usr/lib/systemd/system/docker.service找到ExecStart=/usr/bin/dockerd-current然后直接加入如下

## ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \

然后进行重启:

systemctl daemon-reload && systemctl restart docker

DockerFile:

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决

dockerfile是一个文本文件,其内包含了一条条指令,每条指令构建一层,因此每条指令都应该描述如何构建.

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大

在 /usr/local:

​ 创建docker目录,然后创建一个tomcat的dockerfile目录,

from:必须是第一条指令,用于指定基础的镜像

run:用于执行命令行命令,由于命令行的强大,

命令有两种格式:shell格式: exec格式:

DokerFile指令

指令相对比较庞大 自行学习把,比较常用的有FROM,RUN,还提及了COPY,ADD

参考:dockfile定制镜像

DockerFile轻量化方式

下面的这个的dockerfile 是从 Debian "jessie"系统下构建一个编译、安装 redis 可执行文件。

FROM debian:jessieRUN apt-get updateRUN apt-get install -y gcc libc6-dev makeRUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz"RUN mkdir -p /usr/src/redisRUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1RUN make -C /usr/src/redisRUN make -C /usr/src/redis install

Dockerfile 中每一个指令都会建立一层,RUN也不例外。每一个RUN的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后,commit这一层的修改,构成新的镜像。

而上面的这种写法,创建了 7 层镜像。这是完全没有意义的,而且很多运行时不需要的东西,都被装进了镜像里,比如编译环境、更新的软件包等等。结果就是产生非常臃肿、非常多层的镜像,不仅仅增加了构建部署的时间,也很容易出错

FROM debian:jessieRUN buildDeps='gcc libc6-dev make' \&& apt-get update \&& apt-get install -y $buildDeps \&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \&& mkdir -p /usr/src/redis \&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \&& make -C /usr/src/redis \&& make -C /usr/src/redis install \&& rm -rf /var/lib/apt/lists/* \&& rm redis.tar.gz \&& rm -r /usr/src/redis \&& apt-get purge -y --auto-remove $buildDeps

这里没有使用很多个 RUN 对一一对应不同的命令,而是仅仅使用一个 RUN 指令,并使用 && 将各个所需命令串联起来。将之前的 7 层,简化为了 1 层。这并不是在写 Shell 脚本,而是在定义每一层该如何构建.并且,这里为了格式化还进行了换行。Dockerfile 支持 Shell 类的行尾添加\的命令换行方式,以及行首#进行注释的格式。良好的格式,比如换行、缩进、注释等,会让维护、排障更为容易,这是一个比较好的习惯。

此外,还可以看到这一组命令的最后添加了清理工作的命令,删除了为了编译构建所需要的软件,清理了所有下载、展开的文件,并且还清理了apt缓存文件。这是很重要的一步,我们之前说过,镜像是多层存储,每一层的东西并不会在下一层被删除,会一直跟随着镜像。因此镜像构建时,一定要确保每一层只添加真正需要添加的东西,任何无关的东西都应该清理掉

关于层的图片请看:

一个docker镜像由多个可读的镜像层组成,然后运行的容器会在这个docker的镜像上面多加一层可写的容器层,任何的对文件的更改都只存在此容器层。因此任何对容器的操作均不会影响到镜像

dockerfile 支持shell类后面添加\命令方式换行,以及首行#号进行注释格式,很多人 制作出了很臃肿的镜像的原因之一,就是忘记了每一层构建的最后一定要清理掉无关文件.那就是使用&&进行链接

FROM centosRUN yum install wgetRUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"RUN tar -xvf redis.tar.gz

以上执行会创建 3 层镜像。可简化为以下格式:FROM centosRUN yum install wget \&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \&& tar -xvf redis.tar.gz

docker bulid -t centos:1.0进行构建

比如构建一个nginx:

在一个空白目录中,建立一个文本文件,并命名为Dockerfilevim Dockerfile

From nginxRun echo '</h1>Hello, Docker!</h1>' /usr/share/nginx/html/index.html

使用以下命令进行构建:

docker build [选项] <上下文路径/URL/->

在这里我们指定了最终镜像的名称-t nginx:v3,构建成功后,运行这个镜像

Dokerfile比较庞大具体的其他的构建可以去看 docker file list

更多关于docker层的概念请看:

Docker分层原理与内部结构

Dockerfile实践指南之层数与大小的控制

Docker多阶段构建最佳实践

docker镜像的优化

使用上下文环境构建:

会看到docker build命令最后有一个..表示当前目录,而Dockerfile就在当前目录,这个路径不能认为是在指定 Dockerfile 所在的路径,这么理解其实是不准确的。如果对应上面的命令格式,你可能会发现,这是在指定上下文路径

一般来说,应该会将Dockerfile置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用.gitignore一样的语法写一个.dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。

那么为什么会有人误以为.是指定Dockerfile所在目录呢?这是因为在默认情况下,如果不额外指定Dockerfile的话,会将上下文目录下的名为Dockerfile的文件作为 Dockerfile。

这只是默认行为,实际上Dockerfile的文件名并不要求必须为Dockerfile,而且并不要求必须位于上下文目录中,比如可以用-f ../Dockerfile.php参数指定某个文件作为Dockerfile

当然,一般大家习惯性的会使用默认的文件名Dockerfile,以及会将其置于镜像构建上下文目录中。

创建一个html文件:

​ 创建一个Dockerfile 里面书写:from tomcat copy /usr/local/tomcat/webapps/root

​ 然后执行一个为:docker build -t myshop.

​ 里会自动的寻找到 Dockerfile可以看到打印的执行的语句然后进入 tomcat中会发现已经创建了个index.html

在Dockerfile 中的使用构建时先声明from tomcatworkdir /usr/local/tomcat/webapps/root/run rm -fr *copy spring-boot-institute.jar .Run unzip spring-boot-institute.jarrun rm -fr spring-boot-institute.jarworkdir /usr/local/tomcat

运行这个docker容器:docker build -t institute这里会自动的寻找到Dockerfile

比如一个项目中这样使用:

FROM php:apache#Install gitRUN apt-get update && apt-get install -y git&& docker-php-ext-install pdo pdo_mysql mysqli&& a2enmod rewrite#Install ComposerRUN php -r "copy('/installer', 'composer-setup.php');"&& php composer-setup.php --install-dir=. --filename=composer&& mv composer /usr/local/bin/COPY ./html/ /var/www/html/EXPOSE 80

执行命令启动docker build -f dockerfile -t myapp:0.1

比如一个maven项目 :

创建一个DockerFilevim dockerfile

# First stage: complete build environmentFROM maven:3.5.0-jdk-8-alpine AS builder# add pom.xml and source codeADD ./pom.xml pom.xmlADD ./src src/# package jarRUN mvn clean package# Second stage: minimal runtime environmentFrom openjdk:8-jre-alpine# copy jar from the first stageCOPY --from=builder target/my-app-1.0-SNAPSHOT.jar my-app-1.0-SNAPSHOT.jarEXPOSE 8080CMD ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"]

执行命令启动docker build -f dockerfile -t myapp:0.1

Docker数据卷:

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

数据卷 可以在容器之间共享和重用

对 数据卷 的修改会立马生效

对 数据卷 的更新,不会影响镜像

数据卷 默认会一直存在,即使容器被删除

注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的 数据卷。

创建一个数据卷:docker volume create my-vol``查看所有数据卷:docker volume ls`主机里查看指定的数据卷:docker volume inspect my-vol启动一个挂载的数据容器:在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷。下面创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /webapp 目录。:

$ docker run -d -P \--name web \# -v my-vol:/wepapp \--mount source=my-vol,target=/webapp \training/webapp \python app.py

查看数据卷的信息:

​ 在主机里使用以下命令可以查看 web 容器的信息

​ docker inspect web

删除数据卷:

命令:docker volume rm my-vol

​ 数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

无主的数据卷的删除用以下命令清理:

docker volume pruse

实例共享数据卷:

在/usr/loca/docker/tomcat下创建一个ROOT目录,并在里面书写一个index.html

然后启动docker容器的tomcat:

docker run -p 8080:8080 --name tomcat -d -v /usr/local/docker/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT tomcat

通过交互式进入容器中的tomcat:docker exec -it tomcat bash

可以在webapps中的ROOT目录看到index.html,

然后在启动一个tomcat:docker run -p 8081:8080 --name tomcat1 -d -v /usr/local/docker/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT tomcat

这时访问就可以看到两个同时访问了一个数据卷了,这时就可以共享到数据卷了

Docker镜像:

docker下载镜像:

1.docker pull ubuntu:16.04

//docker image ls :查看镜像列表列出的是顶级的镜像

// docker ps :查看容器列表

2.运行这个ubuntu容器:

docker run -it --rm \

ubuntu:16.04 \

bash

其实上面的一串命令等于:docker run -it --rm ubuntu:16.04 bash

3.说明:

it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。

​ --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。ubuntu:16.04:这是指用 ubuntu:16.04 镜像为基础来启动容器。bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash运行一个容器等于运行一个对象,

Docker镜像操作

列出镜像docker image ls

拉取镜像docker pull [ubuntu:13.10]

查找镜像docker search [httpd]

镜像是不能够单独启动的他是依靠容器的根据镜像运行一个容器:docker run --name container-name -d image-name

eg :docker run –name myredis –d redis

​ --name:自定义容器名

​ -d:后台运行 image-name:指定镜像模板 列表 docker ps(查看运行中的容器);

​ 加上-a;可以查看所有容器

​ //docker image ls :查看镜像列表列出的是顶级的镜像

​ //docker ps :查看容器列表

删除镜像docker image rm [选项] <镜像1> [镜像2,...]其中,<镜像>可以是镜像短 ID镜像长 ID镜像名或者镜像摘要。或者:docker rmi [镜像name]

构建镜像docker build -t runoob/centos:6.7 .

参数说明:

-t:指定要创建的目标镜像名.:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

❤注:[]内均为参数,也就是必选的

虚悬镜像:

镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为 。

原因:

​ 这个镜像原本是有镜像名和标签的,原来为 mongo:3.2,随着官方镜像维护,发布了新版本后,重新 docker pull mongo:3.2 时,mongo:3.2 这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 。除了 docker pull 可能导致这种情况,docker build 也同样可以导致这种现象。

​ 由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。

删除虚悬镜像:

$ docker image prune

查看中间层镜像:

docker image ls -a

​ 这些无标签的镜像很多都是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导致上层镜像因为依赖丢失而出错。

​ 实际上,这些镜像也没必要删除,因为之前说过,相同的层只会存一遍,而这些镜像是别的镜像的依赖,因此并不会因为它们被列出来而多存了一份,无论如何你也会需要它们

​ docker image ls 还支持强大的过滤器参数 --filter,或者简写 -f。之前我们已经看到了使用过滤器来列出虚悬镜像的用法,它还有更多的用法。比如,我们希望看到在 mongo:3.2 之后建立的镜像

$ docker image ls -f since=mongo:3.2 想看某个位置之前的镜像 :只需要把 since 换成 before

删除指定的镜像:

​ docker image rm [选项] <镜像1> [<镜像2> …] 其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。

停止 docker stop container-name/container-id 停止当前你运行的容器 启动 docker start container-name/container-id 启动容器删除 docker rm container-id 删除指定容器 端口映射 -p 6379:6379 eg:docker run -d -p 6379:6379 --name myredis docker.io/redis -p:主机端口(映射到)容器内部的端口容器日志 docker logs container-name/container-id

Docker构建tomact:

​ 进入docker目录:docker pull tomcat

​ 启动:

docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat说明:-p 8080:8080:将容器的8080端口映射到主机的8080端口-v $PWD/test:/usr/local/tomcat/webapps/test:将主机中当前目录下的test挂载到容器的/test

​ 查看容器启动情况:docker ps

备注:

1.命令:docker pull tomcat

下载tomcat 9:docker pull tomcat:9-jre82.docker中运行tomcat:需要制定端口

docker run -p 8080:8080 tomcat

Docker构建mysql:

​ 进入docker目录:docker pull mysql:5.7.22

​ 启动运行:

docker run -p 3306:3306 --name mysql

​ -v /usr/local/docker/mysql/conf:/etc/mysql

​ -v /usr/local/docker/mysql/logs:/var/log/mysql

​ -v /usr/local/docker/mysql/data:/var/lib/mysql

​ -e MYSQL_ROOT_PASSWORD=lkl555

​ -d mysql:5.7.22

​ 说明:-p 3306:3306:将容器的3306端口映射到主机的3306端口

​ -v /usr/local/docker/mysql/conf:/etc/mysql:将主机当前目录下的 conf 挂载到容器的 /etc/mysql

​ -v /usr/local/docker/mysql/logs:/var/log/mysql:将主机当前目录下的 logs 目录挂载到容器的 /var/log/mysql

​ -v /usr/local/docker/mysql/data:/var/lib/mysql:将主机当前目录下的 data 目录挂载到容器的 /var/lib/mysql

​ -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码

​ 查看:docker ps -a 查看刚刚启动的服务

出现的错误:

​ Error response from daemon: driver failed programming external connectivity on endpoint mysql (c28bcf099d63d5f3b2affd38a033a42d60e3cf7054fc1bd520342b73f6a2987b): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use

​ 原因是本地的mysql已经启动了端口不能够进行映射了、

​ 所以停掉本地的mysql服务:sudo service mysql stop

​ 或者使用:docker ps -a

​ 然后使用 docker rm xxxxxxxxx

​ 然后再从新启动

​ 需要进入:docker容器内

​ docker run -it --rm mysql:5.7.22 bash

​ ls -al

​ 查看安装到容器的哪个位置:whereis mysql

​ 进入、etc/mysql/mysql.conf.d

​ 查看 f是否有 max_allowd_packet=128M

​ 没有的话则进行追加:echo “max_allowd_packet=128M” >> f

​ 这样是为了设置mysql可以执行文件的大小。

​ 修改之后退出,进入ubuntu界面,然后重启mysql容器 docker restart mysql

​ 将容器里面的配置文件移到宿主机 mysql/conf 目录下: docker cp mysql:/etc/mysql .

​ 将这些文件移动到conf目录下

​ 注意:这里出现了错误并不能够去copy过去。。。。

Docker构建oracle

1.拉去oracle数据库镜像

docker pull -/helowin/oracle_11g

2.启动oracle 自动启动镜像 --restart=always

docker run -p 1521:1521 --name oracle_11g -d --restart=always -/helowin/oracle_11g

3.启动服务:docker start oracle_11g

4.进入控制台设置用户信息 :docker exec -it oracle_11g bash

5.切换到root用户模式下

su root

输入密码helowin

6.编辑profile文件配置ORACLE环境变量

export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2

export ORACLE_SID=helowin

export PATH=ORACLEHOME/bin:ORACLE_HOME/bin:ORACLEH​OME/bin:PATH

7.重启配置文件服务

source /etc/profile

8.建立sqlplus软连接

ln -s $ORACLE_HOME/bin/sqlplus /usr/bin

9.切换到oracle用户,修改oracle的相关账号密码

su oracle

//登录sqlplus并修改sys、system用户密码

sqlplus /nolog

conn /as sysdba

alter user system identified by oracle; # 将system的密码改为oracle

alter user sys identified by oracle; # 将sys的密码改为oracle

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; # 更改配置文件默认限制密码

10.使用navicat进行连接:

oracle中的sys用户和system用户的区别:

【sys】所有 oracle 的数据字典的基表和视图都存放在 sys 用户中,这些基表和视图对于 oracle 的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。 sys 用户拥有 dba , sysdba , sysoper 等角色或权限,是 oracle 权限最高的用户。【 system】 用户用于存放次一级的内部数据,如 oracle 的一些特性或工具的管理信息。 system 用户拥有普通 dba 角色权限。【system】用户只能用 normal 身份登陆 em ,除非你对它授予了 sysdba 的系统权限(grant sysdba to system)或者 sysoper 系统权限。【 sys 】用户具有 “SYSDBA” 或者 “SYSOPER” 系统权限,登陆 em 也只能用这两个身份,不能用 normal 。

Docker 容器命令操作

新建启动docker run [container ID or NAMES]

查看日志 :docker container logs [container ID or NAMES]例:docker container logs 635c90c02f22

查看容器列表 :docker container ls

守护态运行 :docker run -d ubuntu:17.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

查看容器 :docker container ls -a

停止容器运行 :docker container stop [id]等价于—>docker stop [id]例如:docker container stop 635c90c02f22

进入容器:docker exec -t [ubuntu]

删除容器 :docker container rm [container-name]或者 :docker rm -f [continer Id 或者name]

清理所有处于终止的容器 :docker container prune

查看当前运行的容器 :docker ps

启动容器:docker start [container ID or NAMES]docker start 26c7868e652f

❤注:[]内均为参数,也就是必选的,

Docker Compose:

Docker Compose:是docker官方编排的快速,对于容器集群很有利Compose定位是:定义和运行多个Docker容器的应用,主要是为了解决多个容器间的相互配合来完成某项任务。他允许用户通过docker-compose.yml的定义一组相关连的应用容器为一个项目服务:一个应用容器,实际上可以包括若干个运行相同镜像的容器实例项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml中定义compose默认管理的是对象是项目,通过子命令对项目快捷的生命周期的管理

安装docker compose:

如果你已经安装了docker那么就先把docker给删除了,

先进行卸载:apt-get autoremove docker-cedocker

然后删除dokcerlist文件:在/etc/apt/sources.list.d

安装docker:

安装docker :sudo curl -fsSL -o get-docker.sh

因为有的aliyun上面没有具体的升级版本,所以把镜像给改写:sh get-docker.sh --mirror AzureChinaCloudcd

这时只需等待即可。。。。。。

检查镜像加速文件是否存在:在/etc/docker/daemon.json中

​ /etc/docker/daemon.json 在这里加入{ "registry-mirrors":["https://registry.docker-"]}

检查dockerversion:

然后安装docker-compose看下面的就可以了

安装docker 和docker compose要同时安装,

linux安装docker compose:采用二进制包进行安装:

$ sudo curl -L /docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose加入可执行的权限:$ sudo chmod +x /usr/local/bin/docker-compose

卸载docker compose:

$ sudo rm /usr/local/bin/docker-compose

Docker Compose 使用:

模板文件:

在docker 文件夹中的tomcat中的创建 docker-compose.yml

version: "3"services:webapp:image: examples/webports:- "80:80"volumes:- "/data"

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。

运行 compose 项目: docker-compose up

Docker compose的命令的使用:

基本的命令的格式的:docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]命令选项:-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。--x-networking 使用 Docker 的可拔插网络后端特性--x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge--verbose 输出更多调试信息。-v, --version 打印版本并退出。build的命令:docker-compose build [options] [SERVICE...]option:--force-rm 删除构建过程中的临时容器。--no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。--pull 始终尝试通过 pull 来获取更新版本的镜像。config:验证文件格式是否正确,若正确则显示配置,若错误则进行错误原因down:此命令将会停止 up 命令所启动的容器,并移除网络exec:进入指定的容器。help:获得一个命令的帮助。images:列出 Compose 文件中包含的镜像。kill:格式为 docker-compose kill [options] [SERVICE...]。通过发送 SIGKILL 信号来强制停止服务容器。rm:格式为 docker-compose rm [options] [SERVICE...]。删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。-f:强制直接删除-v:删除容器所挂载的数据卷run:docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]。参数:-d 后台运行容器。--name NAME 为容器指定一个名字。--entrypoint CMD 覆盖默认的容器启动指令。-e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量。-u, --user="" 指定运行容器的用户名或者 uid。--no-deps 不自动启动关联的服务容器。--rm 运行命令后自动删除容器,d 模式下将忽略。-p, --publish=[] 映射容器端口到本地主机。--service-ports 配置服务端口并映射到本地主机。-T 不分配伪 tty,意味着依赖 tty 的指令将无法运行。start,stop,top,pause,port 和docker中的使用的都一样

前台运行:docker-compose up

后台运行:docker-compose up -d

启动:docker-compose start

停止:docker-compose stop

停止并移除容器:docker-compose down

Docker compose实战Nginx

version: '3.1'services:nginx:restart: alwaysimage: nginxcontainer_name: nginxports:- 81:80volumes:- ./conf/nginx.conf:/etc/nginx/nginx.conf- ./wwwroot:/usr/share/nginx/wwwroot

配置nginx的数据卷:

在dokcer文件下创建:nginx的目录下创建:nginx.conf文件:

在当前目录创建wwwroot目录

这里直接书写为

/usr/local/dokcer/nginx/conf/nginx.conf

/usr/local/dokcer/nginx/wwwroot

在nginx.conf目录配置nginx的虚拟主机:然后去配置nginx即可

Docker compose实战tomcat:

version: '3.1'services:tomcat:restart: alwaysimage: tomcatcontainer_name: tomcatports:- 8080:8080volumes:- /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/testenvironment:TZ: Asia/Shanghai

Docker compose 实战mysql5:

version: '3.1'services:mysql:restart: alwaysimage: mysql:5.7.22container_name: mysqlports:- - 3306:3306environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456command:--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1--max_allowed_packet=128M--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"volumes:- mysql-data:/var/lib/mysqlvolumes:mysql-data:

就是为了简化docker的使用:

直接运行 docker-compose.yml中的就可以使用。运行即可以

docker-compose up

Docker compose 实战oracle

version: '3.1'services:oracle:# sid: xe# username: system# password: oracleimage: sath89/oracle-xe-11grestart: always #如果docker容器由于一些问题挂掉的化,docker-composer会自动把容器给启动起来container_name: oracle #启动之后容器的名称volumes:- /my-docker-data/oracle-11g/data:/u01/app/oracleports:- 1521:1521

启动服务:docker-compose -f oracle.yml up -d

查看运行的组件:docker ps -a

Docker compose 实战RabbitMQ

version: '3.1'services:rabbitmq:restart: alwaysimage: rabbitmq:managementcontainer_name: rabbitmqports:- 5672:5672- 15672:15672environment:TZ: Asia/ShanghaiRABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes:- ./data:/var/lib/rabbitmq

centos用上面的会出现chown: changing ownership of '/var/lib/rabbitmq': Permission denied

解决方案:/article/9c69d48f7821b853c9024ef8.html

Docker compose 实战RocketMq

docker-compose.yml

注意:启动RocketMQ server + Broker+ Console至少需要2G内容。

version: '3.5'services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./data/logs:/opt/logs- ./data/store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: foxiswho/rocketmq:brokercontainer_name: rmqbrokerports:- 10909:10909- 10911:10911volumes:- ./data/logs:/opt/logs- ./data/store:/opt/store- ./data/brokerconf/broker.conf:/etc/rocketmq/broker.confenvironment:NAMESRV_ADDR: "rmqnamesrv:9876"JAVA_OPTS: " -Duser.home=/opt"JAVA_OPT_EXT: "-server -Xms128m -Xmx128m -Xmn128m"command: mqbroker -c /etc/rocketmq/broker.confdepends_on:- rmqnamesrvnetworks:rmq:aliases:- rmqbrokerrmqconsole:image: styletang/rocketmq-console-ngcontainer_name: rmqconsoleports:- 8080:8080environment:JAVA_OPTS: "-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"depends_on:- rmqnamesrvnetworks:rmq:aliases:- rmqconsolenetworks:rmq:name: rmqdriver: bridge

需要配置一下broker.conf 我们需要在./data/brokerconf/ 目录下创建一个名为broker.conf的配置文件。

# Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements. See the NOTICE file distributed with# this work for additional information regarding copyright ownership.# The ASF licenses this file to You under the Apache License, Version 2.0# (the "License"); you may not use this file except in compliance with# the License. You may obtain a copy of the License at##/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# 所属集群名字brokerClusterName=DefaultCluster# broker 名字,注意此处不同的配置文件填写的不一样,如果在 broker-a.properties 使用: broker-a,# 在 broker-b.properties 使用: broker-bbrokerName=broker-a# 0 表示 Master,> 0 表示 SlavebrokerId=0# nameServer地址,分号分割# namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed# 解决方式1 加上一句 producer.setVipChannelEnabled(false);,解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP# brokerIP1=192.168.0.253# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数defaultTopicQueueNums=4# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,falseautoCreateTopicEnable=true# 是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭autoCreateSubscriptionGroup=true# Broker 对外服务的监听端口listenPort=10911# 删除文件时间点,默认凌晨4点deleteWhen=04# 文件保留时间,默认48小时fileReservedTime=120# commitLog 每个文件的大小默认1GmapedFileSizeCommitLog=1073741824# ConsumeQueue 每个文件默认存 30W 条,根据业务情况调整mapedFileSizeConsumeQueue=300000# destroyMapedFileIntervalForcibly=120000# redeleteHangedFileInterval=120000# 检测物理文件磁盘空间diskMaxUsedSpaceRatio=88# 存储路径# storePathRootDir=/home/ztztdata/rocketmq-all-4.1.0-incubating/store# commitLog 存储路径# storePathCommitLog=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/commitlog# 消费队列存储# storePathConsumeQueue=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/consumequeue# 消息索引存储路径# storePathIndex=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/index# checkpoint 文件存储路径# storeCheckpoint=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/checkpoint# abort 文件存储路径# abortFile=/home/ztztdata/rocketmq-all-4.1.0-incubating/store/abort# 限制的消息大小maxMessageSize=65536# flushCommitLogLeastPages=4# flushConsumeQueueLeastPages=2# flushCommitLogThoroughInterval=10000# flushConsumeQueueThoroughInterval=60000# Broker 的角色# - ASYNC_MASTER 异步复制Master# - SYNC_MASTER 同步双写Master# - SLAVEbrokerRole=ASYNC_MASTER# 刷盘方式# - ASYNC_FLUSH 异步刷盘# - SYNC_FLUSH 同步刷盘flushDiskType=ASYNC_FLUSH# 发消息线程池数量# sendMessageThreadPoolNums=128# 拉消息线程池数量# pullMessageThreadPoolNums=128

Docker compose实战Redis:

version: '3.1'services:redis:image: redis:latestcontainer_name: redisrestart: alwaysports:- 6379:6379networks:- mynetworkvolumes:- ./redis.conf:/usr/local/etc/redis/redis.conf:rw- ./data:/data:rwcommand:/bin/bash -c "redis-server /usr/local/etc/redis/redis.conf "networks:mynetwork:external: true

Docker compose实战Redis集群:

version: '3.1'services:master:image: rediscontainer_name: redis-masterports:- 6379:6379slave1:image: rediscontainer_name: redis-slave-1ports:- 6380:6379command: redis-server --slaveof redis-master 6379slave2:image: rediscontainer_name: redis-slave-2ports:- 6381:6379command: redis-server --slaveof redis-master 6379

使用sentinel实现高可用:

version: '3.1'services:sentinel1:image: rediscontainer_name: redis-sentinel-1ports:- 26379:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:#数据卷- ./sentinel1.conf:/usr/local/etc/redis/sentinel.confsentinel2:image: rediscontainer_name: redis-sentinel-2ports:- 26380:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel2.conf:/usr/local/etc/redis/sentinel.confsentinel3:image: rediscontainer_name: redis-sentinel-3ports:- 26381:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf

修改Sentinel文件:

分别为 sentinel1.conf,sentinel2.conf,sentinel3.conf,配置文件内容相同

配置内容如下:

port 26379dir /tmp# 自定义集群名,其中 127.0.0.1 为 redis-master 的 ip,6379 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)sentinel monitor mymaster 192.168.147.132 6379 2sentinel down-after-milliseconds mymaster 30000sentinel parallel-syncs mymaster 1sentinel failover-timeout mymaster 180000sentinel deny-scripts-reconfig yes

启动集群:

docker-compose up -d

查看集群是否生效:

进入 Sentinel 容器,使用 Sentinel API 查看监控情况:

docker exec -it redis-sentinel-1 /bin/bash

redis-cli -p 26379

sentinel master mymaster

sentinel slaves mymaster

生效后即可:

Docker compose实战FastDFS

参考下的 SpringClouditoken 项目下的FastDFS一节:http://www.kaysanshi.top/learning-note/

Docker compose实战Dubbo zookeeper

单节点:

单机模式

新建zookeeper文件夹。在zookeeper文件夹中新建dokcer-compose.yml

version: '3.1'services:zoo1:image: zookeeperrestart: alwayshostname: zookeeperports:- 2181:2181

进入容器。

docker exec -it zookeeper_zool_1 /bin/bash

检查是否安装成功:l

./bin/zkServer.sh status

进入bin目录后查看bin目录下的文件:

root@zookeeper:/apache-zookeeper-3.6.2-bin# ls -l bintotal 64-rwxr-xr-x. 1 zookeeper zookeeper 232 Sep 4 12:43 README.txt-rwxr-xr-x. 1 zookeeper zookeeper 2066 Sep 4 12:43 zkCleanup.sh-rwxr-xr-x. 1 zookeeper zookeeper 1158 Sep 4 12:43 zkCli.cmd-rwxr-xr-x. 1 zookeeper zookeeper 1620 Sep 4 12:43 zkCli.sh-rwxr-xr-x. 1 zookeeper zookeeper 1843 Sep 4 12:43 zkEnv.cmd-rwxr-xr-x. 1 zookeeper zookeeper 3690 Sep 4 12:43 zkEnv.sh-rwxr-xr-x. 1 zookeeper zookeeper 4559 Sep 4 12:43 zkServer-initialize.sh-rwxr-xr-x. 1 zookeeper zookeeper 1286 Sep 4 12:43 zkServer.cmd-rwxr-xr-x. 1 zookeeper zookeeper 11116 Sep 4 12:43 zkServer.sh-rwxr-xr-x. 1 zookeeper zookeeper 988 Sep 4 12:43 zkSnapShotToolkit.cmd-rwxr-xr-x. 1 zookeeper zookeeper 1377 Sep 4 12:43 zkSnapShotToolkit.sh-rwxr-xr-x. 1 zookeeper zookeeper 996 Sep 4 12:43 zkTxnLogToolkit.cmd-rwxr-xr-x. 1 zookeeper zookeeper 1385 Sep 4 12:43 zkTxnLogToolkit.shroot@zookeeper:/apache-zookeeper-3.6.2-bin#

通过zkCli来访问 Zookeeper 的控制台来进行管理。

root@zookeeper:/apache-zookeeper-3.6.2-bin# zkCli.sh -server 127.0.0.1:2181Connecting to 127.0.0.1:2181-11-20 02:26:42,393 [myid:] - INFO [main:Environment@98] - Client environment:zookeeper.version=3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/ 12:44 GMT-11-20 02:26:42,397 [myid:] - INFO [main:Environment@98] - Client environment:host.name=zookeeper-11-20 02:26:42,397 [myid:] - INFO [main:Environment@98] - Client environment:java.version=11.0.9.1-11-20 02:26:42,398 [myid:] - INFO [main:Environment@98] - Client environment:java.vendor=Oracle Corporation-11-20 02:26:42,398 [myid:] - INFO [main:Environment@98] - Client environment:java.home=/usr/local/openjdk-11......Welcome to ZooKeeper!-11-20 02:26:42,475 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1167] - Opening socket connection to server localhost/127.0.0.1:2181.-11-20 02:26:42,475 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1169] - SASL config status: Will not attempt to authenticate using SASL (unknown error)JLine support is enabled-11-20 02:26:42,491 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@999] - Socket connection established, initiating session, client: /127.0.0.1:40896, server: localhost/127.0.0.1:2181-11-20 02:26:42,511 [myid:127.0.0.1:2181] - INFO [main-SendThread(127.0.0.1:2181):ClientCnxn$SendThread@1433] - Session establishment complete on server localhost/127.0.0.1:2181, session id = 0x10013cdbf990003, negotiated timeout = 30000WATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: 127.0.0.1:2181(CONNECTED) 0] create /hello-zone 'world'Created /hello-zone[zk: 127.0.0.1:2181(CONNECTED) 1] ls /[dubbo, hello-zone, zookeeper][zk: 127.0.0.1:2181(CONNECTED) 2]

去git 的dubbo 源码 ,然后打jar包,上传到服务器。

这个时候直接启动jar 就能访问到了。java -jar dubbo-admin-0.2.0-SNAPSHOT.jar

注意这个地方我的那个application.properties并未改动。

admin.registry.address=zookeeper://127.0.0.1:2181admin.config-center=zookeeper://127.0.0.1:2181admin.metadata-report.address=zookeeper://127.0.0.1:2181

请看页面效果:

Docker compose实战zookeeper集群 (有问题 -未解决)

伪集群模式:

在原来的使用是server zool:3888总是出现问题。新版本推荐使用以下

version: '3.1'services:zoo1:image: zookeeperrestart: alwayshostname: zoo1ports:- 2181:2181environment:ZOO_MY_ID: 1ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888zoo2:image: zookeeperrestart: alwayshostname: zoo2ports:- 2182:2181environment:ZOO_MY_ID: 2ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888zoo3:image: zookeeperrestart: alwayshostname: zoo3ports:- 2183:2181environment:ZOO_MY_ID: 3ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888

分别以交互方式进入容器查看

docker exec -it zookeeper_zoo1_1 /bin/bashdocker exec -it zookeeper_zoo1_2 /bin/bashdocker exec -it zookeeper_zoo1_3 /bin/bash

Docker compose实战 gitlab

docker-compose.yml

version: '3'services:gitlab:restart: alwaysimage: twang2218/gitlab-ce-zhhostname: '192.168.147.132'environment:TZ: 'Asia/Shanghai'GITLAB_OMNIBUS_CONFIG: |external_url 'http://192.168.147.132:8080'gitlab_rails['gitlab_shell_ssh_port'] = 2222unicorn['port'] = 8888nginx['listen_port'] = 8080ports:- '8080:8080'- '8443:443'- '2222:22'volumes:- /usr/local/docker/gitlab/config:/etc/gitlab- /usr/local/docker/gitlab/data:/var/opt/gitlab- /usr/local/docker/gitlab/logs:/var/log/gitlab

Docker compose实战 nexus

version: '3.1'services:nexus:restart: alwaysimage: sonatype/nexus3container_name: nexusports:- 8081:8081volumes:- /usr/local/docker/nexus/data:/nexus-data

通过:http://ip:port/用户名:密码:验证

Docker compose 实战ElasticSecarch

docker-compose.yml

version: '3.3'services:elasticsearch:image: wutang/elasticsearch-shanghai-zone:6.3.2container_name: elasticsearchrestart: alwaysports:- 9200:9200- 9300:9300environment:cluster.name: elasticsearch

访问 : http://elasticsearchIP:9200/ 查看是否成功

Docker compose編排容器

一般使用先进行安装环境然后通过docker-compose.yml进行编排启动各个服务。

比如我们有一个 spring cloud项目

Docker-Registry:

Docker 私服:

​ cd /usr/local/docker

​ 创建 registry目录

​ 使用docker compose命令直接使用:

version: '3.1'services:registry:image: registryrestart: alwayscontainer_name: registryports:- 5000:5000volumes:- /usr/local/docker/registry/data:/var/lib/registry

只要安装之后就可以了,这里只是服务端,同样我们需要客户端测试:http://ip:5000/v2/

我们在开发时构建服务端之后,在客户端构建一个服务之后上传到这个docker私服中有其他人使用的话直接在这个地方拉取:同时需要在客户端配置:/etc/docker/daemon.jsondaemon.json中配置:

{"registry-mirrors": ["https://registry.docker-"],"insecure-registries": ["ip:5000"]}

之后重启就可以:

sudo systemctl daemon-reload

sudo systemctl restart docker

测试镜像上传:

​ 拉取一个镜像

​ docker pull nginx

## 查看全部镜像 docker images## 标记本地镜像并指向目标仓库(ip:port/image_name:tag,该格式为标记版本号)docker tag nginx 192.168.75.133:5000/nginx## 提交镜像到仓库docker push 192.168.75.133:5000/nginx查看全部镜像:curl -XGET http://192.168.75.133:5000/v2/_catalog部署Docker Registry WebUI私服安装成功后就可以使用 docker 命令行工具对 registry 做各种操作了。然而不太方便的地方是不能直观的查看 registry 中的资源情况。如果可以使用 UI 工具管理镜像就更好了。这里介绍两个 Docker Registry WebUI 工具docker-registry-frontenddocker-registry-web

在客户端中docker-compose中使用这个:

version: '3.1'services:frontend:image: konradkleine/docker-registry-frontend:v2ports:- 8080:80volumes:- ./certs/frontend.crt:/etc/apache2/server.crt:ro- ./certs/frontend.key:/etc/apache2/server.key:roenvironment:- ENV_DOCKER_REGISTRY_HOST=192.168.75.133- ENV_DOCKER_REGISTRY_PORT=5000

如果觉得《Docker最全总结 DockerFile Docker编排容器 Docker镜像 Docker-compose构建》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。