docker总结

docker安装和卸载

安装

#1.卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
             
#2.安装
#安装所需软件
yum install -y yum-utils
#设置国内镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker-ce:社区版 docker-ce-cli docker客户端
yum install docker-ce docker-ce-cli containerd.io
#重启服务
systemctl restart docker 
#查看docker安装是否安装成功
docker version

卸载

#1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2.删除资源  docker 默认工作路径:/var/lib/docker
rm -rf /var/lib/docker

配置阿里云加速器

链接:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ziycotf5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

帮助命令

docker version #显示docker的版本信息
docker info #显示docker系统的详细信息 包括镜像和容器信息
docker 命令 --help #可以查看命令的帮助信息

镜像操作

1.docker images #查看docker的所有镜像

[root@izbp13a472vhas8t43gozvz ~] docker images  #查看docker的所有镜像
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
zt-api-gateway        1.0-SNAPSHOT        1b21aab993ef        2 days ago          683 MB
#解释
REPOSITORY 镜像的仓库源
TAG        镜像的标签
IMAGE ID   镜像ID
CREATED    镜像创建时间
SIZE 		  镜像大小

docker images 命令的可选项

-a --all #列出所有镜像
-q --quiet #只显示镜像ID
# 常用 docker images -qa

2.docker search 搜索镜像

docker search 镜像名

[root@izbp13a472vhas8t43gozvz ~] docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   9550      [OK]       
docker.io   docker.io/mariadb                           MariaDB is a community-developed fork of M...   3469      [OK]       
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   700                  [OK]

#可选项
-f --filter 过滤条件

[root@izbp13a472vhas8t43gozvz ~] docker search mysql --filter=STARS=700
INDEX       NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                MySQL is a widely used, open-source relati...   9550      [OK]       
docker.io   docker.io/mariadb              MariaDB is a community-developed fork of M...   3469      [OK]       
docker.io   docker.io/mysql/mysql-server   Optimized MySQL Server Docker images. Crea...   700                  [OK]

3.docker pull拉取镜像

docker pull 镜像名

默认是下载latest版本

docker pull mysql

也可以指定下载版本

docker pull mysql:5.0

4.docker rmi镜像删除

# 删除指定容器 -f表示强制删除
docker rmi -f 镜像ID 

#删除全部镜像
docker rmi $(docker images -qa)

容器命令

1.启动镜像 :docker run [可选参数] 镜像

#可选参数
-name "容器名称" #启动容器后,容器名称,用来区别同一镜像的多个容器
-d #后台方式运行
-it #使用交互方式运行,进入容器查看内容
-p 主机端口:镜像端口 #用于端口映射
-P #随机指定端口

#以交互启动容器 可以进到容器内部对数据进行操作
[root@izbp13a472vhas8t43gozvz ~]# docker run -it  470671670cac
[root@c27c8c188995 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

2.以-it启动容器,现在退出容器有几种方式

exit 		 #退出容器,并且容器停止运行
Ctrl+P+Q  #退出容器的交互模式,容器后台运行

3.查看容器:docker ps [可选参数]

docker ps #查看正在运行的容器 up表示健康正在运行
[root@izbp13a472vhas8t43gozvz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c27c8c188995        470671670cac        "/bin/bash"         2 minutes ago       Up 2 minutes                            sad_albattani

docker ps -a #查看所有的容器
docker ps -aq #列出所有容器ID

4.容器删除:docker rm

docker rm 容器名或者容器ID

docker rm -f 容器名或者容器ID #-f表示强制删除容器,运行状态下也可以删除

docke rm -f $(docker ps -qa) #删除所有容器

docker ps -aq | xargs docker rm -f #删除所有容器

5.启动和停止容器

docker start 容器名或者容器ID #开启容器

docker restart 容器名或者容器ID #重启容器

docker stop 容器名或者容器ID #停止容器

docker kill 容器名或者容器ID #强制停止容器

常用命令

1.后台启动容器命令

docker run -d –name="" 镜像

#使用docker ps会发现该容器没有工作,因为镜像发现提供服务就会自动停止

2.查看日志命令

docker logs -f —-details -t --tail 行数 容器

可选参数说明

 Options:
        --details        显示更多的信息
    -f, --follow         跟踪实时日志
        --since string   显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
        --tail string    从日志末尾显示多少行日志, 默认是all
    -t, --timestamps     显示时间戳
        --until string   显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)

3.查看容器进程

docker top 容器

[root@izbp13a472vhas8t43gozvz ~]# docker top zt-re-eu
UID    	PID    	 PPID    	 C         STIME    TTY       TIME             CMD
root    16003     15986        2         19:59		?       00:00:30       java -jar /app.jar

查看后我们可以在linux下看到该进程,可以kill掉他

[root@izbp13a472vhas8t43gozvz ~]# ps -aux | grep 16003
root     16003  2.4 10.8 2611620 204600 ?      Ssl  19:59   0:32 java -jar /app.jar
root     16230  0.0  0.0 112812   968 pts/0    R+   20:21   0:00 grep --color=auto 16003

4.查看镜像元数据

docker inspect 容器

可以查看容器的详细信息,网络、镜像、容器、挂载目录、、、、等

5.进入容器

以后台方式进入容器

  • 方式一 :进入的是他所在的操作系统 要退出来可以使用Ctrl+p+q出来后不会停止,会在后台运行

docker exec -it 容器 bash

[root@izbp13a472vhas8t43gozvz ~]# docker exec -it 41ff46e1c4a1 /bash
root@41ff46e1c4a1:/# ls
app.jar  bin  boot  dev  etc  home  lib  lib64	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var
root@41ff46e1c4a1:/# 

docker exec -it 容器 /bin/bash

[root@izbp13a472vhas8t43gozvz ~]# docker exec -it 41ff46e1c4a1 /bin/bash
root@41ff46e1c4a1:/# ls
app.jar  bin  boot  dev  etc  home  lib  lib64	media  mnt  opt  proc  root  run  sbin	srv  sys  tmp  usr  var
root@41ff46e1c4a1:/# 
  • 方式二:进入这个容器的内部 退出按crtl+c会直接停止容器 需要在docker run创建这个容器时加入 -it参数,这样按Ctrl+p+q出来后不会停止

docker attach 容器

这个是进入正在运行容器内部

[root@izbp13a472vhas8t43gozvz ~]# docker attach 41ff46e1c4a1
2020-05-27 12:30:39.171  INFO 1 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry  : Running the evict task with compensationTime 0ms

6.从容器内拷贝文件到主机上 容器-》主机

不管容器运行不运行只要数据在就可以拷贝出来

docker cp 容器:路径 主机路径

[root@izbp13a472vhas8t43gozvz ~]# docker cp 266ebae21ec9:/app.jar .
[root@izbp13a472vhas8t43gozvz ~]# ls
app.jar 

从主机到容器一般使用的是挂载的方式

Docker镜像加载原理

联合文件系统

联合文件系统UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。
联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

加载原理

docker的境像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS.
bootfst(boot file system)主要包含bootloaderkernelbootloader主要是引导加载kernelLinux制启动时会加载bootfs文件系统,在Docker境像的最底层是bootfs.这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核,当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交始内核,此时系统也会卸载bootfs.
rootfs(root file system),在bootfs之上,包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
在这里插入图片描述

工具

docker图形化管理工具(Portainer

1.下载镜像

docker pull portainer/portainer

2.启动容器Portainer

docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer  portainer/portainer

–restart=always 表示当 Docker 重启时,容器自动启动

3.浏览器输入docker宿主机http://IP:9000

commit 镜像

docker commit  镜像名 #提交镜像
docker commit -a 作者名称 -m 提交信息 容器id 目标镜像:tag

如果不加tag就默认是latest

[root@izbp13a472vhas8t43gozvz ~]# docker commit  -a nangubeishang -m "commit apache tomcat" 39717d2ae1ec tomcat8
sha256:b0eb3a5e4dd15e27842783e4a3811b20ddf7dfb7de8758f81813ff994897233e
[root@izbp13a472vhas8t43gozvz ~]# docker images 
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
tomcat8                         latest              b0eb3a5e4dd1        6 seconds ago       652 MB

容器数据卷

容器数据卷分为容器内的数据在主机上的位置自己手动绑定的数据卷

docker run -it -v 主机目录:容器内目录 -p 本机端口:容器端口 --name 容器名字 镜像

docker volume 可选参数

可选参数:

​ ls

​ inspect

1.查看所有的volumn(容器数据卷)的情况docker volume ls

[root@izbp13a472vhas8t43gozvz ~]# docker volume ls
DRIVER              VOLUME NAME
local               3b0e1debe6e3013eb136c7b88c61ab279859f5cefe00a14a17f3a07219fbca5e
local               3c5451d6b2fa586655c0bd162af79157a91fa2669d9e8e7bcaff279cecce592b
local               e97af0fc4e03fc1645bfb0a2e4711e4d57b525bc8dfaca270b3d3f0da5901f10
local               f68ada1917e6937a2a2ad10c2dd8ef7fc478f4c91ad2e6689fb35749f8bcf440

2.使用docker volume inspect 容器卷名字 看到的是容器数据卷在主机上的位置

[root@izbp13a472vhas8t43gozvz ~]# docker volume inspect  f68ada1917e6937a2a2ad10c2dd8ef7fc478f4c91ad2e6689fb35749f8bcf440
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/f68ada1917e6937a2a2ad10c2dd8ef7fc478f4c91ad2e6689fb35749f8bcf440/_data",
        "Name": "f68ada1917e6937a2a2ad10c2dd8ef7fc478f4c91ad2e6689fb35749f8bcf440",
        "Options": {},
        "Scope": "local"
    }
]

匿名挂载

使用 -v /var/data:/webapps

docker run -it --name mytomcat -P -v /webapps tomcat

具名挂载

-v tomcatvolume:/webapps tomcat

docker run -it --name mytomcat -P -v tomcatvolume:/webapps tomcat

指定路径挂载

-v 主机路径:容器路径

docker run -it --name mytomcat -P -v /var/data:/webapps tomcat

补充

1.通过-v容器内路径,ro,rw改变读写权限

ro readonly 只读 容器中的文件只读

rw readwrite 读写

一旦设置了容器权限,容器对我们挂载出来的内容就有了限定

docker run -it --name mytomcat -P -v /var/data:/webapps:ro tomcat

2.使用--volumes-from 容器可以达到多个容器的数据共享 数据只有一份,但是删除一个容器数据不会被删除

 docker run -itd -P --volumes-from data_container --name myhttp1 httpd 

DockerFile

在这里插入图片描述

Dockerfile命令脚本

1.编写dockerfile

FROM centos

VOLUME ["/TEST"]   #容器数据卷挂载

CMD echo "====mycentos sucess!!!!!!===" #容器启动时会输出的信息

2.使用docker build构建镜像

[root@izbp13a472vhas8t43gozvz ~]# docker build -f dockerfile -t mycentos:1.0 .
Sending build context to Docker daemon 30.92 MB
Step 1/3 : FROM centos
 ---> 470671670cac
Step 2/3 : VOLUME /TEST
 ---> Running in 29959e5fb3e0
 ---> 806829cd5f18
Removing intermediate container 29959e5fb3e0
Step 3/3 : CMD echo "====mycentos sucess!!!!!!==="
 ---> Running in 014f51597017
 ---> a86148237ccf
Removing intermediate container 014f51597017
Successfully built a86148237ccf

启动容器进行测试

[root@izbp13a472vhas8t43gozvz ~]# docker run -it --name centos1.0  mycentos:1.0
====mycentos sucess!!!!!!===

可以看到使用了CMD命令在容器启动是会操作

命令

在这里插入图片描述

FROM

格式为 FROM <image>FROM <image>:<tag>
Dockerfile 的第一条指令必须为 FROM 指令。并且,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令。

# 第一行必须指定基础容器,这里的是tomcat8
FROM tomcat:8

MAINTAINER

格式为 MAINTAINER ,指定维护者信息。

注意:MAINTAINER 指令已经被抛弃,建议使用 LABEL 指令。

# 维护者信息(可选)建议用LABEL 指令
MAINTAINER xiaojianjun xiaojianjun@tansun.com.cn

LABEL

LABEL 指令为镜像添加标签。一个 LABEL 就是一个键值对,也可以一行指定多个键值对。

#多行指定信息
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \that label-values can span multiple lines."

#一行指定多个键值对
LABEL app.version="1.0" app.host='bestxiao.cn' description="这个app产品构建"

如果新添加的 LABEL 和已有的 LABEL 同名,则新值会覆盖掉旧值。

CMD

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条 CMD 命令,只有最后一条会被执行。如果用户在启动容器时指定了要运行的命令,则会覆盖掉 CMD 指定的命令。

CMD echo "------success------OK------"

EXPOSE

告诉 Docker 服务,容器需要暴露的端口号,供互联系统使用。在启动容器时需要通过 -P 参数让 Docker 主机分配一个端口转发到指定的端口。使用 -p 参数则可以具体指定主机上哪个端口映射过来。

EXPOSE 22 80 8443 8080

ENV

格式为 ENV <key> <value> 。指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

RUN

每条 RUN 指令将在当前镜像的基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行。

RUN yum -y install java-1.8.0-openjdk 

ADD

该命令将复制指定的 到容器中的 。其中 可以是 Dockerfile 所在目录的一个相对路径(文件或目录);也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。

ADD <src> <dest>

COPY

复制本地主机的 (为 Dockerfile 所在目录的相对路径,文件或目录) 为容器中的 。目标路径不存在时,会自动创建。当使用本地目录为源目录时,推荐使用 COPY。

COPY <src> <dest>

ADD/COPY 将外部文件copy到容器中。区别是ADD可以使用URL,还可以是tar
COPY只能使用dockerfile所在目录

ENTRYPOINT

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个 ENTRYPOINT 时,只有最后一个生效。

ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2 (shell 中执行)

VOLUME

使用 VOLUME 指令添加多个数据卷,创建一个可以从本地或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

VOLUME ["/data"]
VOLUME ["/data1", "/data2"]

docker网络

查看容器内部网络

docker exec -it gogs ip addr

[root@izbp13a472vhas8t43gozvz ~]# docker exec -it gogs ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
88: eth0@if89: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.4/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:4/64 scope link 
       valid_lft forever preferred_lft forever
#linux可以ping通容器内部
[root@izbp13a472vhas8t43gozvz ~]# ping 172.17.0.4
PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.
64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.206 ms

在这里插入图片描述

–link实现容器网络互联

#使tomacat2的hosts文件中有tomacat1
[root@izbp13a472vhas8t43gozvz ~]# docker run -itd --name tomacat2 --link tomacat1  -P  tomcat8
f848a3f3250ec7489b69e7bf063af65bc94feabaf469f64b955886fa0cd8c10d
[root@izbp13a472vhas8t43gozvz ~]# docker exec -it tomacat2 ping tomacat1
PING tomacat1 (172.17.0.6) 56(84) bytes of data.
64 bytes from tomacat1 (172.17.0.6): icmp_seq=1 ttl=64 time=0.296 ms
64 bytes from tomacat1 (172.17.0.6): icmp_seq=2 ttl=64 time=0.092 ms
#使用--link的实质是在hosts加上了DNS
[root@izbp13a472vhas8t43gozvz ~]# docker exec -it tomacat2 cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.6	tomacat1 36e8c0c01ab0
172.17.0.7	f848a3f3250e

使用的是docker0特点:默认,需要使用--link才能在DNS中添加映射

自定义网络

**docker network ls**查看docker所有网络

网络模式:

​ bridge:该网络支持在同一个宿主机上的各个容器实例之间的通信。bridge网络是一个独立的网络空间,在网络空间内部的各个容器实例能够直接通信。各个容器实例都是连接到一个网桥,即docker0。docker0通过iptables维护了一个NAT路由表,能够连接bridge网络与宿主机的网卡。外部请求到达宿主机的网卡后,根据“宿主机IP:宿主机端口”与“容器实例IP:容器实例端口”之间的映射关系,进行NAT转发,从而实现外部请求与容器实例之间的通信。

​ host:加入到该网络中的所有容器实例,容器实例与容器宿主机之间没有网络隔离,所以容器实例都直接使用宿主机的网络,拥有与宿主机一样的IP,使用的是宿主机的端口。即所有容器实例的使用网卡都是宿主机的网卡,所有容器实例的IP都是宿主机的IP。一个宿主机上的所有容器实例,默认都是相通的,彼此之间通过localhost即可互相访问。不同的容器实例使用的网络端口(其实就是宿主机的端口)必须不同,否则会因冲突而无法启动容器实例。

​ none:none网络是Docker Engine启动即默认创建的网络之一。none网络的网络驱动器为none,即-d=none。

none网络是一个完全隔离的自治网络,甚至与Docker宿主机的网络都不通,必须手工配置网卡后才能够使用。

加入到该网络的容器实例,往往要在后续设置中加入到其他的第三方网络。

创建网络 bridge docker network create --driver bridge --gateway 192.168.0.1 --subnet 192.168.0.0/16 mynet

docker network create --driver bridge --gateway 192.168.0.1 --subnet 192.168.0.0/16 mynet

查看网络详细信息docker network inspect mynet

[root@izbp13a472vhas8t43gozvz ~]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "7837892c4c1d74c78076e5a24f1fed51d17f8ac41ced4666452c4db8901b4ad0",
        "Created": "2020-05-29T12:19:07.830615171+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

使用自己的网络创建容器 加上--net 网络名参数就可以

[root@izbp13a472vhas8t43gozvz ~]# docker run  --name tomcat1 --net mynet -P  -itd tomcat8
9cd186513900a8722a1dcecf0cea734b3a3c489b307e3c710f249aa22878ef1b
[root@izbp13a472vhas8t43gozvz ~]# docker run  --name tomcat2 --net mynet -P  -itd tomcat8
d319524803a2f21e289001a6fff3886aecf8b561e3b6694f93a59f2e3f847c57

可以在Containers中看到我们有哪些容器使用了这个网络

[root@izbp13a472vhas8t43gozvz ~]# docker network inspect mynet
[
    {
        "Name": "mynet",
        "Id": "7837892c4c1d74c78076e5a24f1fed51d17f8ac41ced4666452c4db8901b4ad0",
        "Created": "2020-05-29T12:19:07.830615171+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "9cd186513900a8722a1dcecf0cea734b3a3c489b307e3c710f249aa22878ef1b": {
                "Name": "tomcat1",
                "EndpointID": "52db2338442b1bfedb8841d4b03c980540c9a59429797d45d7c96f107a2f1951",
                "MacAddress": "02:42:c0:a8:00:02",
                "IPv4Address": "192.168.0.2/16",
                "IPv6Address": ""
            },
            "d319524803a2f21e289001a6fff3886aecf8b561e3b6694f93a59f2e3f847c57": {
                "Name": "tomcat2",
                "EndpointID": "673435b6c505030d644c9f5368fedb8192ca52cef2d4d17eacfa70fe4750ab43",
                "MacAddress": "02:42:c0:a8:00:03",
                "IPv4Address": "192.168.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
[root@izbp13a472vhas8t43gozvz ~]# docker exec -it tomcat2 ping tomcat1
PING tomcat1 (192.168.0.2) 56(84) bytes of data.
64 bytes from tomcat1.mynet (192.168.0.2): icmp_seq=1 ttl=64 time=0.159 ms
64 bytes from tomcat1.mynet (192.168.0.2): icmp_seq=2 ttl=64 time=0.098 ms

可以发现不用在手动加上DNS映射,他自己会帮我们维护

docker-compose

一个项目的完整环境包括应用节点(app) 、数据库(mySql)、 缓存(Redis)。 为了管理方便,是否可以将这些节点
全部构建在一个容器中运行?答案是可以的, 但并不推荐这么做,因为它违背了Docker中运行环境隔离的设计初衷。
(每个节点都有其运行环境,如果合在一起,自然它们的环境也要搓合在一起)。

那么怎么简化多节点项目环境的维护呢? Docker-compose就可以解决该问题。通过DockerCompose.yml 描述项目中
各节点容器信息,及依赖信息。然后通过docer-compose一键构建或启动。

安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 给docker-compose添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose

卸载

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

查看版本

docker-compose --version

docker-compose.yml示例文件

version: "3.3"  #docker-compose yml版本 #具体的版本号,请参考官网https://docs.docker.com/compose/compose-file/
services: #代表一个项目
	nginx: #应用 容器
		image: nginx #镜像 
		ports: #端口映射
			- "80:80"
		link: #
			- app
		volumes:
			- "./nginx.config.d/:/etc/nginx/config.d"
	app: #应用
		image: luban/app
cd /opt
mkdir docker-es
cd docker-es
vim docker-compose.yml
docker-compose up -d
version: "3.3"  
services: #代表一个项目
	elasticsearch:
		image: daocloud.io/library/elasticsearch:6.5.4
		restart: always
		container_name: elasticsearch
		ports:
			- 9200:9200
	kibana: 
		image: daocloud.io/library/kibana:6.5.4
		restart: always
		container_name: kibana
		ports:
			- 5601:5601
		environment:
			- elasticsearch_url=http://192.168.32.130:9200
		depends_on:
			- elasticsearch

常用命令

在这里插入图片描述

docker images -qa

docker pull 镜像

docker rmi $(docker images -qa)

docker run --name 容器名 -it 镜像名称或者镜像ID

docker ps

docker ps -a

常用软件安装

mysql

docker run -p 3306:3306 --name mysql8 \
-e MYSQL_ROOT_PASSWORD=123456 \
-itd mysql
docker exec -it mysql8 bash
mysql -uroot -p123456

Linux附录

1.mkdir {1…100} #可以创建100个文件夹,以数字命名 同理mkdir {a…z}可以创建a到z的文件夹

[root@izbp13a472vhas8t43gozvz test]# mkdir {1..100}
[root@izbp13a472vhas8t43gozvz test]# ls
1    11  14  17  2   22  25  28  30  33  36  39  41  44  47  5   52  55  58  60  63  66  69  71  74  77  8   82  85  88  90  93  96  99
10   12  15  18  20  23  26  29  31  34  37  4   42  45  48  50  53  56  59  61  64  67  7   72  75  78  80  83  86  89  91  94  97
100  13  16  19  21  24  27  3   32  35  38  40  43  46  49  51  54  57  6   62  65  68  70  73  76  79  81  84  87  9   92  95  98

2.xargs管道命令

xargs 中的 -i 参数表示将 xargs 的每项名称一项一项赋值给 {}.

ls | xargs -i touch {}/1.txt #每个目录下会创建一个1.txt文件,就像for循环一样
#会吧前面所有结果放到 命令的最后一次执行。
docker ps -aq | xargs docker rm -f	#删除所有容器

_ROOT_PASSWORD=123456
-itd mysql




```shell
docker exec -it mysql8 bash
mysql -uroot -p123456

Linux附录

1.mkdir {1…100} #可以创建100个文件夹,以数字命名 同理mkdir {a…z}可以创建a到z的文件夹

[root@izbp13a472vhas8t43gozvz test]# mkdir {1..100}
[root@izbp13a472vhas8t43gozvz test]# ls
1    11  14  17  2   22  25  28  30  33  36  39  41  44  47  5   52  55  58  60  63  66  69  71  74  77  8   82  85  88  90  93  96  99
10   12  15  18  20  23  26  29  31  34  37  4   42  45  48  50  53  56  59  61  64  67  7   72  75  78  80  83  86  89  91  94  97
100  13  16  19  21  24  27  3   32  35  38  40  43  46  49  51  54  57  6   62  65  68  70  73  76  79  81  84  87  9   92  95  98

2.xargs管道命令

xargs 中的 -i 参数表示将 xargs 的每项名称一项一项赋值给 {}.

ls | xargs -i touch {}/1.txt #每个目录下会创建一个1.txt文件,就像for循环一样
#会吧前面所有结果放到 命令的最后一次执行。
docker ps -aq | xargs docker rm -f	#删除所有容器
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值