局域网服务器怎么搭建docker(如何做局域网服务器)

Docker从零搭建分布式服务器群

1、有2台服务器A和B,系统为centos7

2、有一个分布式的服务端需要部署在A和B上,其中A为主服务,B负责子服务

3、A和B需要在一个网络环境下能互相连接通信

4、A需要暴露2001和4001端口给外网客户端进行连接

5、2台机器都提供一个账户名为\"my\"的账号用于给对方ssh登录用

参考

我们使用 docker run 来创建容器并运行,此时容器在后台运行

我们使用 docker exec 来进入容器内的服务器

此时我们的已经登录进了A服务器,接下来在A服务器上我们进行服务安装通用的基础配置,目的是以后将A服务器作为镜像快速搭建B\\C\\D\\E服务器

查看 cd /etc/ssh 目录如果没有则需要执行下面安装:

配置 vi /etc/ssh/sshd_config ,将以下几项打开

配置完毕后我们启动sshd服务

然后检查sshd启动情况

A服务器的配置基本完成了,现在我们退出A服务器

在我们主机上进行下面的操作

由于我们接下来需要将A、B服务器放在一个网络环境下,这里我们先创建一个网络,命名为myNet

用我们制作的镜像重新创建一次服务器A和B,并且让他们加入我们之前创建的网络myNet内,并实现A服务器暴露2001和4001端口给外网也就是docker外的机器访问

现在我们已经创建好了A和B服务器,由于他们在myNet网络下,互相可以通过容器名来访问,不需要通过IP了,我们尝试从B服务器去ssh A服务器并且用my账号

现在我们A和B服务器就像在局域网一样,不用关心对方IP使用别名即可连接了,并且A对外暴露了端口2001和4001供外部连接

如何搭建及使用docker registry

registry是什么?

registry是Docker的镜像存储服务,docker hub上的registry镜像见Registry官方镜像,更多详细信息请参见源码。

搭建registry

在服务器上执行如下命令安装docker,这里选择腾讯云(Ubuntu Server 14.04.1 LTS 64位)镜像来创建服务器

curl -fsSL | sh

安装docker-compose Docker Compose是一个定义及运行多个Docker容器的工具。使用Docker Compose只需要在一个配置文件中定义多个Docker容器,然后使用一条命令将多个容器启动,Docker Compose会通过解析容器间的依赖关系,按先后顺序启动所定义的容器。详见Docker Compose

curl -L (uname -s)-$(uname -m) /usr/local/bin/docker-compose

chmod a+x /usr/local/bin/docker-compose

启动registry服务,此例中包含nginx和registry两个容器,涉及的包及配置文件请参见附件,解压后,直接执行如下命令即可创建服务。

docker-compose up -d

停止服务

docker-compose stop

重启服务

docker-compose restart

下线服务

docker-compose down

上传镜像

因为上面搭建的registry服务是http的,所以docker启动参数需要配置--insecure-registry localhost选项,修改/etc/default/docker文件

DOCKER_OPTS=\"--insecure-registry localhost\"

重启docker

service docker restart

拉取上传镜像 docker pull;docker tag;docker push(tag默认为latest)

docker pull hello-world

docker tag hello-world localhost/library/hello-world

docker push localhost/library/hello-world

下载镜像

docker pull localhost/library/hello-world

删除镜像

docker rmi localhost/library/hello-world

获取镜像仓库列表

# curl

{\"repositories\":[\"library/hello-world\"]}

未上传镜像前的输出如下:

# curl

{\"repositories\":[]}

获取镜像tag列表

# curl -X GET

{\"name\":\"library/hello-world\",\"tags\":[\"latest\"]}

获取镜像manifests信息

# curl -H \"Accept: application/vnd.docker.distribution.manifest.v2+json\" -X GET

{

\"schemaVersion\": 2,

\"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",

\"config\": {

\"mediaType\": \"application/vnd.docker.container.image.v1+json\",

\"size\": 1473,

\"digest\": \"sha256:c54a2cc56cbb2f04003c1cd4507e118af7c0d340fe7e2720f70976c4b75237dc\"

},

\"layers\": [

{

\"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",

\"size\": 974,

\"digest\": \"sha256:c04b14da8d1441880ed3fe6106fb2cc6fa1c9661846ac0266b8a5ec8edf37b7c\"

}

]

}

其中c54a2cc56cbb2f04003c1cd4507e118af7c0d340fe7e2720f70976c4b75237dc即为执行docker images时看到的IMAGE ID。 layers表示了镜像的层次关系,可以通过layers中的digest来拉取blob,见下面获取镜像blob

获取镜像blob

在上面获取hello-world:latest镜像的manifests信息中可以看到其只有一个layer,以此为例来看如何获取镜像blob。从拉取的结果可以看到获取的blob与文件sha256是一致的。执行docker pull实际上就是首先获取到镜像的manifests信息后,再拉取blob的。

# curl -s -X GET -o hello-world.blob

# ls -l hello-world.blob

-rw-r--r-- 1 root root 974 Nov 23 09:56 hello-world.blob

# sha256sum hello-world.blob

c04b14da8d1441880ed3fe6106fb2cc6fa1c9661846ac0266b8a5ec8edf37b7c hello-world.blob

##删除镜像(soft delete)

首先通过curl -i 参数获取到镜像的Docker-Content-Digest,registry 2.3及以后的版本必须在header中指定Accept: application/vnd.docker.distribution.manifest.v2+json,否则默认返回的是schema1的digest,其与schema2的digest不同,使用不指定上述头信息返回的digest删除时会返回404。

# curl -i -H \"Accept: application/vnd.docker.distribution.manifest.v2+json\" -X GET

HTTP/1.1 200 OK

Server: nginx/1.11.5

Date: Wed, 23 Nov 2016 02:17:51 GMT

Content-Type: application/vnd.docker.distribution.manifest.v2+json

Content-Length: 524

Connection: keep-alive

Docker-Content-Digest: sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4

Docker-Distribution-Api-Version: registry/2.0

Etag: \"sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4\"

{

\"schemaVersion\": 2,

\"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",

\"config\": {

\"mediaType\": \"application/vnd.docker.container.image.v1+json\",

\"size\": 1473,

\"digest\": \"sha256:c54a2cc56cbb2f04003c1cd4507e118af7c0d340fe7e2720f70976c4b75237dc\"

},

\"layers\": [

{

\"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",

\"size\": 974,

\"digest\": \"sha256:c04b14da8d1441880ed3fe6106fb2cc6fa1c9661846ac0266b8a5ec8edf37b7c\"

}

]

}

根据上一步返回的Docker-Content-Digest删除,返回202表示删除成功

# curl -k -v -s -X DELETE

* Hostname was NOT found in DNS cache

* Trying 127.0.0.1...

* Connected to localhost (127.0.0.1) port 80 (#0)

DELETE /v2/library/hello-world/manifests/sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4 HTTP/1.1

User-Agent: curl/7.35.0

Host: localhost

Accept: */*

**HTTP/1.1 202 Accepted**

* Server nginx/1.11.5 is not blacklisted

Server: nginx/1.11.5

Date: Wed, 23 Nov 2016 02:29:59 GMT

Content-Type: text/plain; charset=utf-8

Content-Length: 0

Connection: keep-alive

Docker-Distribution-Api-Version: registry/2.0

* Connection #0 to host localhost left intact

确认结果

# curl -X GET

{\"name\":\"library/hello-world\",\"tags\":null}

删除镜像(hard delete)

在上一步中,只是删除了镜像的manifests信息,解引用的blob还在占用磁盘空间,执行如下命令可以查看可以删除的blob

docker exec -it myregistry_registry_1 /bin/registry garbage-collect --dry-run /etc/registry/config.yml

要删除blob,释放磁盘空间,需要执行下面的命令。需要特别注意的是在执行下面的命令时registry必须是只读模式(只读模式可在registry配置文件中设置),否则可能会导致数据不一致。

docker exec -it myregistry_registry_1 /bin/registry garbage-collect /etc/registry/

三步搭建私有Docker Registry(V2)服务器

网上方法千奇百怪,长篇大论看得心累,所以我希望三步之内解决这件事,那么开始吧。

你需要安装1.6.0以上的版本的 Docker 。

如果要使用域名绑定私有仓库,必须开启SSL。

生成下面文字即为成功:

克隆仓库。

编辑配置。

模板如下:

移动你的证书到 cert/ 目录。

备份一下原文件,使用https配置。

然后 vim nginx.conf ,要改的地方很少,如下:

没有问题的话已经运行起来了~~

现在你可以通过域名pull镜像了:

新建一个文件夹以便管理。

填写下面的内容到docker-compose.yml:

移动证书到自定义目录:

然后配置Nginx文件即可:

域名修改一下,复制粘贴即可。

现在你可以通过域名pull镜像了:

官方文档: Deploying a registry server

如何在服务器上部署docker

Debian / Ubuntu

sudo apt update

sudo apt install docker.io

sudo systemctl enable docker

sudo systemctl start docker

RedHat / CentOS

sudo yum update

sudo yum install docker.io

sudo systemctl enable docker

sudo systemctl start docker

Docker容器怎样连接局域网mysql服务器

可以创建Dockerfile依赖mysql镜像创建一个新的镜像。

上诉命令通过RUN来执行创建的新容器会有安装的软件。

最后通过slave的docker连接到master的容器mysql服务器上master的服务器mysql账号root赋值权限!

如何使用 Docker 部署容器

设想,为了推出一个网站,您不必从裸机安装一个完整的服务器。 而不是安装操作系统,然后安装服务器软件,然后部署精心设计的应用程序或站点,您可以简单地在一个独立的包中开发所有内容,并使用单个命令将其推出。

这是使用容器的众多好处之一。它们使开发和部署周期变得异常高效。但是你如何部署这些容器?我想在这里指导你完成这个过程。我们将专注于在Ubuntu Server 18.04上部署基本的NGINX Web服务器作为容器。所有这一切都将在Docker的帮助下完成。

为了成功将NGINX部署为容器,您需要具备以下条件:

- 一个安装了Docker的Ubuntu Server 18.04的运行实例。

- 一个docker 用户组的成员用户

是的,有了这两部分,你就准备好了。

您部署的每个容器都将基于从DockerHub中提取的镜像。 您可以下拉单个镜像并根据需要随时使用。 DockerHub上还有许多镜像用于单个应用程序或平台。 以NGINX为例。 如果你在DockerHub上搜索NGINX,你会得到大约56,172个条目。 这并不意味着每个条目都是您可以使用的可用图像。

图像命名如下:

例如,对于NGINX,您可能会找到一个名字为的镜像:

或许你可能找到:

您也看到了,有几乎所有需要的镜像。

在使用图像之前,必须将其保存在本地驱动器上。 有两种方法可以做到这一点:

- 直接使用pull命令

- 间接地,在容器部署过程中。

要从DockerHub中拉取图像,您将打开一个终端窗口并发出命令:

如果你想拉取Ingress图像,该命令是:

当你拉取你需要的图像之后,你可以使用命令确认是否存在:

上面的命令将列出你拉取的所有镜像(图A)。

拉取随意图像时要谨慎。 为什么? 因为你永远不知道创造它们的原因。 容器可能包含恶意代码,可能会对您的网络或数据造成严重破坏。 因此,最好只使用官方图像(例如NGINX图像)。

现在该部署容器了, 如果您尚未拉取镜像,则在部署阶段将下拉所需要的镜像。 由于我们拉取官方NGINX图像,我们将使用它。

要部署容器,请使用docker命令,如下所示:

备注:

- NAME等于您要为容器提供的名称(这可以是任何内容,例如nginx-webserver)。

- PORTS您要使用的端口(以NETWORK PORT:CONTAINER PORT形式)。

- IMAGE用于容器的图像(例如nginx)。

因此,部署NGINX容器的基本命令是:

容器将要部署,NGINX Web服务器将在端口80上可用于本地网络。但是,如果已在服务器上使用端口80来部署容器,该怎么办? 您可以将其部署在网络端口8080上,如下所示:

此时,您可能会看到下一个问题。 运行上述命令之一后,不返回bash提示符(图B)。

你如何运行一个容器,并获得你的bash提示? 为此,您必须以分离模式运行容器。 在此之前,您必须使用键盘组合[Ctrl] +终止当前容器。 该组合将返回提示并杀死容器。

要确定容器是否运行,使用命令:

将列出所有容器及其状态(图C)。

如果容器仍在运行,我们必须在同一端口部署另一个容器之前将其终止(否则端口会发生冲突,从而阻止容器部署)。 要杀死正在运行的容器,首先需要Container ID(随机字符串)。 发出docker ps -a命令时会显示此字符串。 要终止正在运行的容器,使用命令:

其中CONTAINER_ID是相关容器的ID。

然后,您可以使用以下命令删除容器:

其中CONTAINER_ID是相关容器的ID。

请注意,您不必输入完整的Container ID,字符串的前四个字符就足够了。

现在,要以分离模式部署容器,命令是:

这次你不仅会得到你的提示,而且Docker会为你显示容器ID(图D)。

如果你想在正在运行的容器上工作怎么办? 假设您想对NGINX进行更改甚至开始开发它将显示的网站? 因此,您必须访问容器。 因此,您需要Container ID。 使用ID,发出命令:

其中CONTAINER_ID是容器的ID。

您现在应该处于运行容器提示符(图E)中,您可以在其中开始处理NGINX服务器。

要退出容器,只需键入命令exit。

七、比你想象的容易

希望到现在为止,您看到容器部署并不像您想象的那样具有挑战性。 在Docker的帮助下,您可以在几分钟内推出专业版的应用和服务。

原文链接:

未经允许不得转载:便宜VPS网 » 局域网服务器怎么搭建docker(如何做局域网服务器)