快捷搜索:  汽车  科技

docker应用推荐(docker常用命令)

docker应用推荐(docker常用命令)用法:[root@localhost ~]# docker search java INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/node Node.js is a JavaScript-based platform for... 7907 [OK] docker.io docker.io/tomcat Apache Tomcat is an open source implementa... 2524 [OK] docker.io docker.io/java Java is a concurrent class-based and obj... 1976 [OK] docker.io docker.io/openjdk OpenJDK is an open-source implemen

docker应用推荐(docker常用命令)(1)

通过上图,我们可以看到docker的架构:

  • Client——docker的客户端,给Docker daemon发送请求,操控Docker daemon如何运行。
  • Docker CLI文档
  • DOCKER_HOST——docker守护进程所在服务器。
  • 一般为linux系统的电脑/服务器
  • 如果本地开发/学习/调试使用,可以安装docker for window或者docker for Mac
  • Docker daemon——docker守护进程(也可以理解为docker的服务端),用于拉取镜像(Images)、运行容器(containers)等操作
  • 目前分为 社区版:Docker Engine - Community
  • 企业版:Docker Enterprise
  • Images——镜像。可以理解为可运行的软件包。
  • 可以根据Dockerfile,使用dokcer build命令构建一个镜像。(Dockerfile:描述镜像构建过程的配置文件)
  • 可以把自己构建好的本地镜像使用docker push命令推送到远程镜像注册中心(registry)
  • Containers——容器。通过镜像(Images)创建出容器(Containers)。容器可以运行/停止。
  • Container是在原先的Image之上新加的一层,称作Container layer,这一层是可读可写的(Image是只读的)。
  • Image跟Container的职责区别:Image负责APP的存储和分发,Container负责运行APP。
  • Registry——镜像注册中心。就是镜像的远程仓库。
  • Docker Hub是Docker官方维护的公共镜像注册中心。https://hub.docker.com(科学上网预警)
  • 也可以自己搭建镜像注册中心。
docker images

描述:查看镜像

用法:

docker images [OPTIONS] [REPOSITORY[:TAG]]

举例:

[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest 2ca708c1c9cc 6 days ago 64.2 MB docker.io/zookeeper latest eb0a01329223 11 days ago 225 MB docker.io/elasticsearch 7.3.2 d7052f192d01 2 weeks ago 706 MB docker.io/kibana 7.1.0 714b175e84e8 4 months ago 745 MB docker.io/elasticsearch 7.1.0 12ad640a1ec0 4 months ago 894 MB docker.io/lmenezes/cerebro 0.8.3 3a2daf87f0c7 5 months ago 333 MB [root@localhost ~]# docker images ubuntu REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest 2ca708c1c9cc 6 days ago 64.2 MB [root@localhost ~]# docker search

描述:从远程registry中搜索镜像(默认的registry是Docker hub 可能需要科学上网......)

用法:

docker search [OPTIONS] TERM

举例:

[root@localhost ~]# docker search java INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/node Node.js is a JavaScript-based platform for... 7907 [OK] docker.io docker.io/tomcat Apache Tomcat is an open source implementa... 2524 [OK] docker.io docker.io/java Java is a concurrent class-based and obj... 1976 [OK] docker.io docker.io/openjdk OpenJDK is an open-source implementation o... 1887 [OK] docker.io docker.io/ghost Ghost is a free and open source blogging p... 1029 [OK] docker.io docker.io/jetty Jetty provides a Web server and javax.serv... 314 [OK] docker.io docker.io/groovy Apache Groovy is a multi-faceted language ... 77 [OK] docker.io docker.io/lwieske/java-8 Oracle Java 8 Container - Full Slim - Ba... 45 [OK] docker.io docker.io/nimmis/java-centos This is docker images of CentOS 7 with dif... 42 [OK] docker.io docker.io/fabric8/java-JBoss-openjdk8-jdk Fabric8 Java Base Image (JBoss OpenJDK 8) 28 [OK] docker.io docker.io/cloudbees/java-build-tools Docker image with commonly used tools to b... 15 [OK] docker.io docker.io/frekele/java docker run --rm --name java frekele/java 12 [OK] docker.io docker.io/blacklabelops/java Java Base Images. 8 [OK] docker.io docker.io/bitnami/java Bitnami Java Docker Image 5 [OK] docker.io docker.io/rightctrl/java Oracle Java 3 [OK] docker.io docker.io/zoran/java10-sjre Slim Docker image based on AlpineLinux wit... 2 [OK] docker.io docker.io/buildo/java8-wkhtmltopdf Java 8 wkhtmltopdf 1 [OK] docker.io docker.io/cfje/java-buildpack Java Buildpack CI Image 1 docker.io docker.io/cfje/java-resource Java Concourse Resource 1 docker.io docker.io/cfje/java-test-applications Java Test Applications CI Image 1 docker.io docker.io/dwolla/java Dwolla’s custom Java image 1 [OK] docker.io docker.io/cfje/java-buildpack-dependency-builder Java Buildpack Dependencies Builder Image 0 docker.io docker.io/cfje/java-buildpack-memory-calculator Java Buildpack Memory Calculator CI Image 0 docker.io docker.io/jelastic/javaengine An image of the Java Engine server maintai... 0 docker.io docker.io/thingswise/java-docker Java dcd 0 [OK] [root@localhost ~]# docker pull

描述:从Registry拉取一个镜像(images)或一个仓库(repository)

用法:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

常用OPTIONS:

--all-tags -a Download all tagged images in the repository

举例:

[root@localhost ~]# docker search java INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/node Node.js is a JavaScript-based platform for... 7907 [OK] docker.io docker.io/tomcat Apache Tomcat is an open source implementa... 2524 [OK] docker.io docker.io/java Java is a concurrent class-based and obj... 1976 [OK] docker.io docker.io/openjdk OpenJDK is an open-source implementation o... 1887 [OK] docker.io docker.io/ghost Ghost is a free and open source blogging p... 1029 [OK] docker.io docker.io/jetty Jetty provides a Web server and javax.serv... 314 [OK] docker.io docker.io/groovy Apache Groovy is a multi-faceted language ... 77 [OK] docker.io docker.io/lwieske/java-8 Oracle Java 8 Container - Full Slim - Ba... 45 [OK] docker.io docker.io/nimmis/java-centos This is docker images of CentOS 7 with dif... 42 [OK] docker.io docker.io/fabric8/java-jboss-openjdk8-jdk Fabric8 Java Base Image (JBoss OpenJDK 8) 28 [OK] docker.io docker.io/cloudbees/java-build-tools Docker image with commonly used tools to b... 15 [OK] docker.io docker.io/frekele/java docker run --rm --name java frekele/java 12 [OK] docker.io docker.io/blacklabelops/java Java Base Images. 8 [OK] docker.io docker.io/bitnami/java Bitnami Java Docker Image 5 [OK] docker.io docker.io/rightctrl/java Oracle Java 3 [OK] docker.io docker.io/zoran/java10-sjre Slim Docker image based on AlpineLinux wit... 2 [OK] docker.io docker.io/buildo/java8-wkhtmltopdf Java 8 wkhtmltopdf 1 [OK] docker.io docker.io/cfje/java-buildpack Java Buildpack CI Image 1 docker.io docker.io/cfje/java-resource Java Concourse Resource 1 docker.io docker.io/cfje/java-test-applications Java Test Applications CI Image 1 docker.io docker.io/dwolla/java Dwolla’s custom Java image 1 [OK] docker.io docker.io/cfje/java-buildpack-dependency-builder Java Buildpack Dependencies Builder Image 0 docker.io docker.io/cfje/java-buildpack-memory-calculator Java Buildpack Memory Calculator CI Image 0 docker.io docker.io/jelastic/javaengine An image of the Java Engine server maintai... 0 docker.io docker.io/thingswise/java-docker Java dcd 0 [OK] [root@localhost ~]# docker pull java Using default tag: latest Trying to pull repository docker.io/library/java ... sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d: Pulling from docker.io/library/java 5040bd298390: Downloading [======================================> ] 39.05 MB/51.36 MB fce5728aad85: Download complete 76610ec20bf5: Downloading [==========================================> ] 36.18 MB/42.5 MB 60170fec2151: Download complete e98f73de8f0d: Download complete 11f7af24ed9c: Download complete 49e2d6393f32: Downloading [=======> ] 18.9 MB/130.1 MB bb9cdec9c7f3: Waiting

上面是镜像正在下载中显示的内容。

下面是容器下载成功之后,显示的内容:

[root@localhost ~]# docker pull java Using default tag: latest Trying to pull repository docker.io/library/java ... sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d: Pulling from docker.io/library/java 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for docker.io/java:latest ##注释:这里提示新的镜像已经下载成功。 [root@localhost ~]# docker images ##注释:查看本机有哪些镜像 REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/java latest d23bdf5b1b1b 2 years ago 643 MB [root@localhost ~]# docker rmi

描述:删除本地镜像

用法:

docker rmi [OPTIONS] IMAGE [IMAGE...]

举例:

docker images查看当前存在java这个镜像(image)

[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/java latest d23bdf5b1b1b 2 years ago 643 MB

docker rmi java删除java这个镜像

[root@localhost ~]# docker rmi java Untagged: java:latest Untagged: docker.io/java@sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Deleted: sha256:d23bdf5b1b1b1afce5f1d0fd33e7ed8afbc084b594b9ccf742a5b27080d8a4a8 Deleted: sha256:0132aeca1bc9ac49d397635d34675915693a8727b103639ddee3cc5438e0f60a Deleted: sha256:c011315277e16e6c88687a6c683e388e2879f9a195113129a2ca12f782d9fcf9 Deleted: sha256:3181aa7c07970b525de9d3bd15c4c3710a2ab49fd5927df41e5586d9b89b1480 Deleted: sha256:b0053647bc72f97b7a9709a505a20a7a74a556c6aa025979e36532ff3df7cb8d Deleted: sha256:0877f4904e80b44741cc07706b19c6d415724b20128f4b26ee59faec9a859416 Deleted: sha256:dbf7b16cf5d32dfec3058391a92361a09745421deb2491545964f8ba99b37fc2 Deleted: sha256:4cbc0ad7007fe8c2dfcf2cdc82fdb04f35070f0e2a04d5fa35093977a3cc1693 Deleted: sha256:a2ae92ffcd29f7ededa0320f4a4fd709a723beae9a4e681696874932db7aee2c [root@localhost ~]# docker

docker images发现java这个镜像(image)已经被删除了。

[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE [root@localhost ~]# docker ps

描述:查看docker运行中的容器

用法:

docker ps [OPTIONS]

参数:

--all -a 显示所有容器 (默认只显示运行(running)中的容器) [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9c6299ea3dd9 ubuntu "echo 'hello world..." 17 hours ago Exited (0) 17 hours ago elegant_ramanujan 9ea1ee424001 docker.io/elasticsearch:7.3.2 "/usr/local/bin/do..." 19 hours ago Up 18 hours 9200/tcp 9300/tcp es7_02 3704143fe6cd docker.io/kibana:7.1.0 "/usr/local/bin/ki..." 19 hours ago Up 18 hours 0.0.0.0:5601->5601/tcp kibana7 5ce37aebf865 lmenezes/cerebro:0.8.3 "/opt/cerebro/bin/..." 19 hours ago Up 18 hours 0.0.0.0:9000->9000/tcp cerebro 5f046e5a2a52 docker.io/elasticsearch:7.3.2 "/usr/local/bin/do..." 19 hours ago Up 18 hours 0.0.0.0:9200->9200/tcp 9300/tcp es7_01 [root@localhost ~]# docker rm

描述:这个是删除已停止的容器(container)

用法:

docker rm [OPTIONS] CONTAINER [CONTAINER...]

举例:

[root@localhost ~]# docker ps -a | grep ubuntu ##查看ubuntu相关的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost ~]# docker run ubuntu ##使用ubuntu镜像(image)启动一个容器(container) [root@localhost ~]# docker ps -a | grep ubuntu ##查看ubuntu相关的容器 242158aba8b3 ubuntu "/bin/bash" 9 seconds ago Exited (0) 8 seconds ago kind_booth [root@localhost ~]# docker rm ubuntu ##这里报错原因是:ubuntu是镜像名,而不是容器id或容器名 Error response from daemon: No such container: ubuntu [root@localhost ~]# docker rm 242158aba8b3 ##指定容器id,删除容器。 242158aba8b3 [root@localhost ~]# docker ps -a | grep ubuntu [root@localhost ~]# docker run

描述:

在一个新的容器中,运行一个命令

用法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用参数:

--env -e Set environment variables --expose Expose a port or a range of ports --publish -p Publish a container’s port(s) to the host --hostname -h Container host name --name Assign a name to the container --rm Automatically remove the container when it exits --volume -v Bind mount a volume --interactive -i Keep STDIN open even if not attached --tty -t Allocate a pseudo-TTY

举例:(以下使用不同的参数,来举例说明每个参数的作用。)

1、为运行的容器标记一个容器名称,并分配一个可操作容器的终端 【--name】【-i】【-t】

[root@localhost ~]# docker run --name ubuntu_container_name -it ubuntu root@ae89a95bc79a:/# uname -a ##当前这是在ubuntu_container_name容器中。 Linux ae89a95bc79a 3.10.0-1062.1.1.el7.x86_64 #1 SMP Fri Sep 13 22:55:44 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux root@ae89a95bc79a:/# exit ##退出ubuntu_container_name容器 exit [root@localhost ~]# uname -a ## 在本地机器上 Linux localhost.localdomain 3.10.0-1062.1.1.el7.x86_64 #1 SMP Fri Sep 13 22:55:44 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux [root@localhost ~]# docker ps -a | grep ubuntu_container_name ##查看ubuntu_container_name容器进程 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ae89a95bc79a ubuntu "/bin/bash" 2 minutes ago Exited (0) About a minute ago ubuntu_container_name [root@localhost ~]#

如果再次执行上面docker run命令,则会报错:

[root@localhost ~]# docker run --name ubuntu_container_name -it ubuntu /usr/bin/docker-current: Error response from daemon: Conflict. The container name "/ubuntu_container_name" is already in use by container ae89a95bc79aa96f871df6cfa1148765c8fcead8015e15663c5da62e02c72b1f. You have to remove (or rename) that container to be able to reuse that name.. See '/usr/bin/docker-current run --help'. [root@localhost ~]#

可以看到,错误信息说:名为"/ubuntu_container_name"的容器,已经被ae89a95bc79aa96f871df6cfa1148765c8fcead8015e15663c5da62e02c72b1f(这个是容器id)使用。你必须remove或者rename那个容器,才能使用这个容器名称。

所以我们可以使用docker rm删除已经停止的容器:

[root@localhost ~]# docker rm ubuntu_container_name ubuntu_container_name [root@localhost ~]#

然后在此使用docker run,就可以启动成功了:

[root@localhost ~]# docker run --name ubuntu_container_name -it ubuntu root@969073543bb8:/# exit exit [root@localhost ~]#

由此可以知道:docker使用一个镜像(image)(这里我们使用的镜像名称为ubuntu)创建一个容器(container),容器(container)在停止之后,其实并不会自动删除这个容器(container)。(后面会讲解docker start命令,用于启动一个停止的容器。)

2、以守护进程运行【-d】

[root@localhost ~]# docker run -d busybox top Unable to find image 'busybox:latest' locally Trying to pull repository docker.io/library/busybox ... sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e: Pulling from docker.io/library/busybox 7c9d20b9b6cd: Pull complete Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e Status: Downloaded newer image for docker.io/busybox:latest e2b848c56857d83f948dfb2f14739b2e45c036cb42cbb03e510f9bab1ea47b4f [root@localhost ~]#

最后一行输出的,是启动后的容器id。

docker ps看一下运行中的容器:

[root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e2b848c56857 busybox "top" 42 seconds ago Up 41 seconds inspiring_knuth

使用docker logs -f [Container]来查看一下这个容器的日志:

docker应用推荐(docker常用命令)(2)

3、发布容器内的端口[-p]

如果容器中的应用开启了端口,比如nginx的80端口,比如tomcat的8080端口。

默认情况下,在容器和容器之间,是可以访问的,但是在docker之外,是无法访问容器内的端口的。

此时,如果要从容器外,也能访问容器内的端口,则需要把容器内的端口发布出来。也可以理解把容器外的端口和容器内的端口进项关联。就要用到-p参数。

[root@localhost ~]# docker run -d nginx b60a89eb08ba1946051fe94f874d0641fe37889fb739b403f589b2cc170dff05 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b60a89eb08ba nginx "nginx -g 'daemon ..." 17 seconds ago Up 17 seconds 80/tcp nervous_kare

以上命令使用nginx镜像,以守护进程方式-d启动了容器,容器id为:b60a89eb08ba1946051fe94f874d0641fe37889fb739b403f589b2cc170dff05

此时,我们查看一下服务器上的端口信息:并没有80端口。

[root@localhost ~]# netstat -tln | grep 80 [root@localhost ~]# netstat -tln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 ::1:25 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN [root@localhost ~]#

而我们使用-p参数,把本机81端口绑定到容器内80端口

[root@localhost ~]# docker run -d -p 81:80 nginx 88f0ab45b75f4149f25480a354b2415bfd117405735e0e3bcce86f25c52e7e7d [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 88f0ab45b75f nginx "nginx -g 'daemon ..." 7 seconds ago Up 6 seconds 0.0.0.0:81->80/tcp trusting_shockley ## 注释:docker ps输出的PORTS字段内容为:0.0.0.0:81->80/tcp 这里就表示本机81端口绑定到容器内的80端口 [root@localhost ~]# netstat -tln | grep 81 ##此时查看,本机存在81端口 tcp6 0 0 :::81 :::* LISTEN [root@localhost ~]#

我们访问本机81端口:其实最终就是访问到了容器中的80端口,而容器中的80端口,就是nginx的端口。

[root@localhost ~]# curl http://localhost:81 <!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 and working. 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@localhost ~]# docker run 和 docker start区别

docker run

The docker run command first creates a writeable container layer over the specified image and then starts it using the specified command.

That is docker run is equivalent to the API /containers/create then /containers/(id)/start.

A stopped container can be restarted with all its previous changes intact using docker start.

docker run 命令首先使用指定的镜像,创建一个可写的容器层,然后启动新创建的容器。

也就是说,docker run 相当于docker create 之后docker start

一个已停止的容器可以拥有所有私有改动重新启动,通过docker start命令。

docker start

Start one or more stopped containers

启动一个或多个已停止的容器。

docker create

The docker create command creates a writeable container layer over the specified image and prepares it for running the specified command. The container ID is then printed to STDOUT.

This is similar to docker run -d except the container is never started.

除了这个容器没有被启动过,docker create命令和执行docker run -d是很类似的。

You can then use the docker start <container_id> command to start the container at any point.

docker-compose

使用docker-compose可以把docker命令都写到配置文件中,命令更简洁,编排更整齐。

这里使用搭建ZooKeeper三节点集群举例子:

### 备注:使用docker-compose命令启动容器,-f zookeeper-compose.yml指定使用的编排配置文件;up -d表示在后台启动容器。 [root@localhost ~]# docker-compose -f zookeeper-compose.yml up -d Starting zk2_cname ... done Starting zk3_cname ... done Starting zk1_cname ... done ### 备注:查看启动的docker容器。 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 360300c685fa registry.newbanker.cn:5000/zookeeper "/docker-entrypoint.…" 6 days ago Up 6 seconds 2888/tcp 3888/tcp 0.0.0.0:2182->2181/tcp zk2_cname 2bf59a1f9fa0 registry.newbanker.cn:5000/zookeeper "/docker-entrypoint.…" 6 days ago Up 6 seconds 2888/tcp 0.0.0.0:2181->2181/tcp 3888/tcp zk1_cname 063172618f7f registry.newbanker.cn:5000/zookeeper "/docker-entrypoint.…" 6 days ago Up 6 seconds 2888/tcp 3888/tcp 0.0.0.0:2183->2181/tcp zk3_cname ### 备注:查看docker-compose的配置文件,即zookeeper-compose.yml [root@localhost ~]# cat zookeeper-compose.yml version: '3' ##compose配置文件的版本;文档:https://docs.docker.com/compose/compose-file(下面有可直接点击的链接) services: zk1: ## image: registry.newbanker.cn:5000/zookeeper ##使用我公司的ZooKeeper的镜像## container_name: zk1_cname ##容器名称## ports: - "2181:2181" ##把本机2181端口绑定到容器内2181端口;等价于docker run -p 2181:2181## environment: ##指定环境变量;因为使用的registry.newbanker.cn:5000/zookeeper镜像里会读取以下环境变量,作为zk的配置文件zoo.conf## ZOO_MY_ID: 1 ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zk2_cname:2888:3888 server.3=zk3_cname:2888:3888 volumes: ##数据持久化## - "/zkdata/zk1_data:/data" - "/zkdata/zk1_datalog:/datalog" zk2: image: registry.newbanker.cn:5000/zookeeper container_name: zk2_cname ports: - "2182:2181" ##把本机2182端口绑定到容器内2181端口;等价于docker run -p 2182:2181## environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zk1_cname:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zk3_cname:2888:3888 volumes: - "/zkdata/zk2_data:/data" - "/zkdata/zk2_datalog:/datalog" zk3: image: registry.newbanker.cn:5000/zookeeper container_name: zk3_cname ports: - "2183:2181" ##把本机2183端口绑定到容器内2181端口;等价于docker run -p 2183:2181## environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zk1_cname:2888:3888 server.2=zk2_cname:2888:3888 server.3=0.0.0.0:2888:3888 volumes: - "/zkdata/zk3_data:/data" - "/zkdata/zk3_datalog:/datalog"

虽然使用docker-compose,需要编写配置文件,而且有很多重复的,但是毕竟相比docker run命令来搭建,整体命令要整洁的多。

大家有兴趣可以使用docker run命令来搭建一下以上ZooKeeper集群(不要问我为啥没有在博客中写docker run命令搭建ZooKeeper集群的完整命令,因为太难了。溜了溜了。。。。)

docker-compose文档:https://docs.docker.com/compose/reference/overview/

compose配置文件的版本——文档:https://docs.docker.com/compose/compose-file/

备注:registry.newbanker.cn:5000/zookeeper是我公司的私有镜像,大家应该没有地方下载此镜像,这无所谓,可以随便找一个ZooKeeper镜像来搭建ZooKeeper集群:

使用docker search zookeeper命令来搜索ZooKeeper镜像:这里使用start最高的zookeeper镜像就行。

### 备注: 使用docker search zookeeper命令来搜索ZooKeeper镜像 [root@localhost ~]# docker search zookeeper NAME DESCRIPTION STARS OFFICIAL AUTOMATED zookeeper Apache ZooKeeper is an open-source server wh… 724 [OK] jplock/zookeeper Builds a docker image for Zookeeper version … 165 [OK] wurstmeister/zookeeper 96 [OK] mesoscloud/zookeeper ZooKeeper 73 [OK] mbabineau/zookeeper-exhibitor 24 [OK] digitalwonderland/zookeeper Latest Zookeeper - clusterable 20 [OK] bitnami/zookeeper ZooKeeper is a centralized service for distr… 16 [OK] confluent/zookeeper 13 [OK] tobilg/zookeeper-webui Docker image for using `zk-web` as ZooKeeper… 11 [OK] ### 备注:使用docker pull zookeeper命令把远程镜像拉取到本地。 [root@localhost ~]# docker pull zookeeper .......................这里省略拉取日志..................... ### 备注:查看本地docker镜像 [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE zookeeper latest eb0a01329223 4 days ago 225MB docker-tags

[root@localhost bin]# cat docker-tags #!/bin/bash API="https://registry.hub.docker.com/v1/repositories" DEFAULT_NAME="nginx" DEFAULT_TIMEOUT=3 function Usage(){ cat << HELP Usage: docker-tags NAME[:TAG] docker-tags list all tags for docker image on a remote registry. Example: docker-tags (default nginx) docker-tags nginx docker-tags nginx:1.15.8 docker search nginx | docker-tags docker search nginx | docker-tags :1.15.8 echo nginx | docker-tags echo nginx | docker-tags :1.15.8 HELP } ARG=$1 if [[ "$ARG" =~ "-h" ]];then Usage exit 0 fi function ParseJson(){ tr -d '[\[\]" ]' | tr '}' '\n' | awk -F: -v image=$1 '{if(NR!=NF && $3 != ""){printf("%s:%s\n" image $3)}}' } function GetTags(){ image=$1 tag=$2 ret=`curl -s ${API}/${image}/tags` tag_list=`echo $ret | ParseJson ${image}` if [ -z "$tag" ];then echo -e "$tag_list" else echo -e "$tag_list" | grep -w "$tag" fi } if [ -z $ARG ] || [[ ${ARG:0:1} == ":" ]];then if [ -x /usr/bin/timeout ];then images=`timeout $DEFAULT_TIMEOUT` awk '{print $1}' | grep -v "NAME" || echo $DEFAULT_NAME else images=`awk '{print $1}' | grep -v "NAME"` fi else images=`echo $ARG | awk -F: '{print $1}'` fi tag=`echo $ARG | awk -F: '{print $2}'` for i in ${images} do tags=`GetTags $i $tag` count=`echo $tags | wc -w` if [[ $count -gt 0 ]];then echo -e "IMAGE [$i:$tag]:" echo -e "$tags" echo fi done [root@localhost bin]#

猜您喜欢: