docker笔记

docker安装文档:Install Docker Engine on CentOS | Docker Documentationhttps://docs.docker.com/engine/install/centos/

测试是否安装成功

[root@kvm12-219 ~]# docker run hello-world
 ​
 Hello from Docker!
 This message shows that your installation appears to be working correctly.
 ​
 To generate this message, Docker took the following steps:
  1. The Docker client contacted the Docker daemon.
  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
     (amd64)
  3. The Docker daemon created a new container from that image which runs the
     executable that produces the output you are currently reading.
  4. The Docker daemon streamed that output to the Docker client, which sent it
     to your terminal.
 ​
 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash
 ​
 Share images, automate workflows, and more with a free Docker ID:
  https://hub.docker.com/
 ​
 For more examples and ideas, visit:
  https://docs.docker.com/get-started/

卸载docker

#卸载依赖
 yum remove docker-ce docker-ce-cli containerd.io
 #删除资源
 rm -rf /var/lib/docker
 rm -rf /var/lib/containerd

阿里云镜像加速

  1. 登录阿里云,控制台->容器镜像服务->镜像加速器

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

  1. 修改daemon配置文件/etc/docker/daemon.json来使用加速器

#修改文件
 sudo mkdir -p /etc/docker
 sudo tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://d1etb7ew.mirror.aliyuncs.com"] #根据自己在阿里云获取的地址填写
 }
 EOF
 #重启服务
 sudo systemctl daemon-reload
 sudo systemctl restart docker

docker常用命令

帮助命令

docker version #查看docker版本信息
docker info  #查看docker详细信息,包括镜像和容器数量
docker 命令 --help #帮助命令
#帮助文档地址:https://docs.docker.com/reference/

镜像命令

 #查看所有镜像
 [root@kvm12-219 ~]# docker images -a
 REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
 nginx         latest    605c77e624dd   2 months ago   141MB
 httpd         latest    ea28e1b82f31   3 months ago   143MB
 ......
 #搜索镜像 docker search
 [root@kvm12-219 ~]# docker search mysql
 NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
 mysql                            MySQL is a widely used, open-source relation…   12253     [OK]       
 mariadb                          MariaDB Server is a high performing open sou…   4710      [OK]       
 ......  
 #下载镜像  docker pull 镜像名称:tag  tag默认latest
 [root@kvm12-219 ~]# docker pull mysql
 Using default tag: latest
 ......
 [root@kvm12-219 ~]# docker pull mysql:5.7
 5.7: Pulling from library/mysql
 ......
 #删除指定镜像 docker rmi -f 镜像id(多个容器id之间用空格隔开)
 [root@kvm12-219 ~]# docker images
 REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
 mysql         5.7       c20987f18b13   2 months ago   448MB
 mysql         latest    3218b38490ce   2 months ago   516MB
 [root@kvm12-219 ~]# docker rmi -f 3218b38490ce
 Untagged: mysql:latest
 Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
 Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
 Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
 Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
 Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
 Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
 Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
 #删除全部镜像
 docker rmi -f $(docker images -aq)

容器命令

有了镜像才可以创建容器

docker run [可选参数] image_id
 # 参数说明
 --name="Name"   容器名字,用来区分容器
 -d  后台方式运行
 -it     使用交互方式运行,进入容器查看内容
 -p(小写)      指定容器的端口 -p 8080:8080
     -p  主机端口:容器端口(常用)
     -p  容器端口
 -P(大写)      随机指定端口
 #启动并进入容器
 [root@kvm12-219 ~]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
 centos       latest    5d0da3dc9764   6 months ago   231MB
 [root@kvm12-219 ~]# docker run -it centos /bin/bash
 [root@afa899e57939 /]#
 #退出容器
 [root@afa899e57939 /]# exit  #exit直接容器停止并退出  退出后不停止容器(Ctrl + p + q)
 exit
 [root@kvm12-219 ~]#
 #查看正在运行的容器
 [root@kvm12-219 ~]# docker ps
 CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
 #查看所有容器
 [root@kvm12-219 ~]# docker ps -a
 CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                          PORTS     NAMES
 afa899e57939   centos    "/bin/bash"   3 minutes ago   Exited (0) About a minute ago             pedantic_burnell
 #列出所有容器id
 [root@kvm12-219 ~]# docker ps -aq
 afa899e57939
 #删除容器
 docker rm 容器id  #删除指定容器,不能删除正在运行的容器,强制删除加  -f  参数
 docker rm -f $(docker ps -aq)  #删除所有容器
 #启动和停止容器
 docker start 容器id       #启动容器
 docker restart 容器id     #重启容器
 docker stop 容器id        #停止当前正在运行的容器
 docker kill 容器id        #强制停止当前容器

常用的其他命令

后台启动容器

#docker run -d 镜像名
 [root@kvm12-219 ~]# docker run -d centos
 a5d1d9febaa882f9d7bf8d11b0c2298cae5f857d20fd641ac8bf9e4a6deca4ea
 #问题docker ps ,发现centos停止了
 #常见问题:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

查看日志

#docker logs --help #查看帮助文档
 # docker logs [OPTIONS] CONTAINER
 #创建一个容器并执行一个脚本,方便打印日志
 [root@kvm12-219 ~]# docker run -d centos /bin/sh -c "while true;do echo hello;sleep 1;done"
 40c169f5d898bf9f420d23bb603d6bb8f5d2ea13bc9fdb56f1e5daccfc2de53e
 [root@kvm12-219 ~]# docker ps
 CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
 40c169f5d898   centos    "/bin/sh -c 'while t…"   4 seconds ago   Up 3 seconds             great_snyder
 #查看日志
 [root@kvm12-219 ~]# docker logs -f -t --tail 10 40c169f5d898
 2022-03-17T03:19:13.277457703Z hello
 2022-03-17T03:19:14.283653436Z hello
 2022-03-17T03:19:15.290146907Z hello

查看容器中的进程信息

#命令 :docker top 容器id
 [root@kvm12-219 ~]# docker ps
 CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
 5dce0b210df6   centos    "/bin/sh -c 'while t…"   4 seconds ago   Up 3 seconds             heuristic_yalow
 [root@kvm12-219 ~]# docker top 5dce0b210df6
 UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
 root                22214               22195               0                   15:14               ?                   00:00:00            /bin/sh -c while true;do echo hello;sleep 1;done
 root                22452               22214               0                   15:14               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

查看容器元数据

#命令  : docker inspect 容器id
 [root@kvm12-219 ~]# docker inspect 5dce0b210df6

进入正在运行的容器

#方式一 :进入容器后开启一个新的终端,可以在里面操作
 #命令:docker exec -it 容器id /bin/bash
 [root@kvm12-219 ~]# docker exec -it 5dce0b210df6 /bin/bash
 [root@5dce0b210df6 /]# ls
 bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
 [root@5dce0b210df6 /]# ps -ef
 UID        PID  PPID  C STIME TTY          TIME CMD
 root         1     0  0 07:14 ?        00:00:00 /bin/sh -c while true;do echo hello;sleep 1;done
 root       355     0  0 07:19 pts/0    00:00:00 /bin/bash
 root       376     1  0 07:19 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
 root       377   355  0 07:20 pts/0    00:00:00 ps -ef
 ​
 #方式二 :进入容器正在执行的终端,不会启动新的进程
 #命令:docker attach 容器id
 [root@kvm12-219 ~]# docker attach 5dce0b210df6

从容器内拷贝文件到主机上

#命令:docker cp 容器id:容器内路径 目的主机路径
 #进入容器
 [root@kvm12-219 ~]# docker attach 879b5440c0a5
 [root@879b5440c0a5 /]# cd /home
 [root@879b5440c0a5 home]# ls
 #创建测试文件
 [root@879b5440c0a5 home]# touch test.docker
 [root@879b5440c0a5 home]# ls
 test.docker
 #退出容器
 [root@879b5440c0a5 home]# lsread escape sequence
 [root@kvm12-219 ~]# docker ps
 CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
 879b5440c0a5   centos    "/bin/bash"   About a minute ago   Up About a minute             trusting_dijkstra
 #拷贝文件到本地 /root目录
 [root@kvm12-219 ~]# docker cp 879b5440c0a5:/home/test.docker /root
 [root@kvm12-219 ~]# ls
 test.docker

提交镜像

 docker commit -m=提交的描述信息 -a=作者 容器id 目标镜像名:[tag]

练习

docker安装nginx

#下载nginx镜像
 [root@kvm12-219 ~]# docker pull nginx
 Using default tag: latest
 latest: Pulling from library/nginx
 a2abf6c4d29d: Pull complete 
 a9edb18cadd1: Pull complete 
 589b7251471a: Pull complete 
 186b1aaa4aa6: Pull complete 
 b4df32aa5a72: Pull complete 
 a0bcbecc962e: Pull complete 
 Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
 Status: Downloaded newer image for nginx:latest
 docker.io/library/nginx:latest
 [root@kvm12-219 ~]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
 nginx        latest    605c77e624dd   2 months ago   141MB
 centos       latest    5d0da3dc9764   6 months ago   231MB
 #后台运行nginx并命名为nginx01,端口映射为本机的3344端口
 [root@kvm12-219 ~]# docker run -d --name nginx01 -p 3344:80 nginx
 4c628cd4f538a812a3b9d1e246342977873fac8813f1852f2c50bd8bb0a85b55
 [root@kvm12-219 ~]# docker ps
 CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
 4c628cd4f538   nginx     "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01
 #访问nginx
 [root@kvm12-219 ~]# curl localhost:3344
 <!DOCTYPE html>
 <html>
 <head>
 <title>Welcome to nginx!</title>
 <style>
 html { color-scheme: light dark; }
 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@kvm12-219 ~]# docker exec -it nginx01 /bin/bash
 root@4c628cd4f538:/# whereis nginx
 nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
 root@4c628cd4f538:/# cd /etc/nginx/
 root@4c628cd4f538:/etc/nginx# ls
 conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params

部署ES+Kibana

#下载并运行elasticsearch
 [root@kvm12-219 ~]# docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
 [root@kvm12-219 ~]# docker ps
 CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
 3814e7d79725   elasticsearch:7.6.2   "/usr/local/bin/dock…"   26 seconds ago   Up 24 seconds   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch
 [root@kvm12-219 ~]# curl localhost:9200
 {
   "name" : "3814e7d79725",
   "cluster_name" : "docker-cluster",
   "cluster_uuid" : "DwsgMO0XQ1eowL8EtK-wPw",
   "version" : {
     "number" : "7.6.2",
     "build_flavor" : "default",
     "build_type" : "docker",
     "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
     "build_date" : "2020-03-26T06:34:37.794943Z",
     "build_snapshot" : false,
     "lucene_version" : "8.4.0",
     "minimum_wire_compatibility_version" : "6.8.0",
     "minimum_index_compatibility_version" : "6.0.0-beta1"
   },
   "tagline" : "You Know, for Search"
 }
 #docker stats 容器id  可以查看容器所占服务器资源
 #elasticsearch非常占内存,可以使用 -e参数增加内存限制
 docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m --Xmx512m"elasticsearch:7.6.2

思考:使用Kibana连接ES,网络如何才能连接过去?

可视化(prtainer)

Docker图形化界面管理工具,提供一个后台面板供我们操作

#安装并运行
 docker run -d -p 9000:9000 \
 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer

访问:http://服务器IP:9000/ (设置密码后即可登录)

选择local ,点击connect即可进入管理本地docker页面

容器数据卷

容器之间可以有个数据共享技术,Docker容器中产生的数据,同步到本地,,这就是卷技术,目录地挂载,将容器内的目录挂载到Linux上面。

使用数据卷

方式一:直接使用命令挂载 -v

 #  docker run -it -v 主机目录:容器内目录
 [root@kvm12-219 home]# pwd
 /home
 [root@kvm12-219 home]# ls    
 centos  confluence  mysftp  mysql  test
 [root@kvm12-219 home]# docker run -it -v /home/ceshi:/home centos /bin/bash
 [root@kvm12-219 home]# ls
 centos  ceshi  confluence  mysftp  mysql  test
 #查看挂载详情
 [root@kvm12-219 home]# docker inspect a845d28a00da
 ......
 "Mounts": [
             {
                 "Type": "bind",
                 "Source": "/home/ceshi",
                 "Destination": "/home",
                 "Mode": "",
                 "RW": true,
                 "Propagation": "rprivate"
             }
         ],
 ......
 #运行MySQL5.7  数据持久化到本地
 [root@kvm12-219 home]# 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
 参数说明:
     -d :后台运行
     -p :指定端口
     -v :指定挂载路径
     -e :修改环境配置
     --name :指定容器名称

初识DockerFile

方式二:DockerFile挂载,dockerfile就是用来构建daocker镜像的构建文件,命令脚本,通过这个脚本可以生成镜像

#创建测试文件
 [root@kvm12-219 ~]# cd /home/
 [root@kvm12-219 home]# mkdir docker-test-volume
 [root@kvm12-219 home]# cd docker-test-volume/
 [root@kvm12-219 docker-test-volume]# vim dockerfile
 ​
 # cat dockerfileFROM centos
 ​
 VOLUME ["volume01","volume02"]
 ​
 CMD echo "-----end-----"
 CMD /bin/bash
 #构建镜像
 [root@kvm12-219 docker-test-volume]# docker build -f dockerfile -t zack/centos:1.0 .
 [root@kvm12-219 docker-test-volume]# docker images
 REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
 zack/centos           1.0       eab442f032eb   10 seconds ago   231MB
 #启动镜像
 [root@kvm12-219 docker-test-volume]# docker run -it eab442f032eb
 #查看挂载信息
 [root@kvm12-219 docker-test-volume]# docker inspect eab442f032eb

DockerFile

dockerfile是用来构建docker镜像的文件,命令脚本

构建步骤:

  1. 编写一个dockerfile文件

  2. docker build 构建镜像

  3. docker run 运行镜像

  4. docker push发布镜像(DockerHub、阿里云镜像仓库)

基础知识

  1. 每个保留关键字指令都是大写字母

  2. 执行从上到下顺序执行

  3. #表示注释

  4. 每一个指令都会创建提交一个新的镜像层,并提交

dockerfie常用指令

 FROM            #基础镜像,一切从这里开始构建
 MAINTAINER      #镜像是谁写的,姓名+邮箱
 RUN             #镜像构建时需要运行的命令
 ADD             #copy文件,会自动压缩
 WORKDIR         #镜像的工作目录
 VOLUME          #设置卷,挂载主机目录
 EXPOSE          #指定对外的端口
 CMD             #指定容器启动时要运行的命令,只有最后一个生效,可被替代
 ENTRYPOINT      #指定容器启动时要运行的命令,可以追加命令
 ONBUILD         #当构建一个被继承的DockerFile 这个时候就会运行ONBUILD的指令,触发指令
 COPY            #复制,类似ADD命令,将文件拷贝到镜像中
 ENV             #构建镜像时设置环境变量

dockerhub(Docker Hub)上面每一个镜像都能查看相应的dockerfile文件,学习别人是如何创建dockerfile,例如centos:

FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

dockerfile实战

Docker Hub中 99% 的镜像都是从 FROM scratch 这个基础镜像过来的!然后配置需要的软件和配置来进行构建 !

官方的centos没有vim,ifconfig等命令,创建一个自己的centos

在home目录下创建一个文件夹

[root@iz2zeaet7s13lfkc8r3e2kz home]# mkdir dockerfile
 [root@iz2zeaet7s13lfkc8r3e2kz home]# ls
 ceshi  dockerfile  docker-test-volume  mysql  www  ysl

在创建的文件夹中创建dockerfile文件,并编写

[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# vim mydockerfile-centos            
 [root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# cat mydockerfile-centos 
 FROM centos
 MAINTAINER ysl<493487822@qq.com>
 ​
 WORKDIR /usr/local
 ​
 RUN yum -y install vim
 RUN yum -y install net-tools
 ​
 EXPOSE 80
 ​
 CMD echo "---end---"
 CMD /bin/bash

通过这个文件构建镜像

[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
 Sending build context to Docker daemon  2.048kB
 Step 1/8 : FROM centos
  ---> 470671670cac
 Step 2/8 : MAINTAINER ysl<493487822@qq.com>
  ---> Running in 2ce4c938a188
 Removing intermediate container 2ce4c938a188
  ---> fd5e9920907d
 Step 3/8 : WORKDIR /usr/local
  ---> Running in 98327d3050d5
 Removing intermediate container 98327d3050d5
  ---> 167672c4b746
 Step 4/8 : RUN yum -y install vim
  ---> Running in 7db13d6a1a95
 CentOS-8 - AppStream                            1.9 MB/s | 7.0 MB     00:03    
 CentOS-8 - Base                                 1.1 MB/s | 2.2 MB     00:02    
 CentOS-8 - Extras                               7.1 kB/s | 5.9 kB     00:00    
 Dependencies resolved.
 ================================================================================
  Package             Arch        Version                   Repository      Size
 ================================================================================
 Installing:
  vim-enhanced        x86_64      2:8.0.1763-13.el8         AppStream      1.4 M
 Installing dependencies:
  gpm-libs            x86_64      1.20.7-15.el8             AppStream       39 k
  vim-common          x86_64      2:8.0.1763-13.el8         AppStream      6.3 M
  vim-filesystem      noarch      2:8.0.1763-13.el8         AppStream       48 k
  which               x86_64      2.21-10.el8               BaseOS          49 k
 ​
 Transaction Summary
 ================================================================================
 Install  5 Packages
 ​
 Total download size: 7.8 M
 Installed size: 31 M
 Downloading Packages:
 (1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm        285 kB/s |  39 kB     00:00    
 (2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 813 kB/s |  48 kB     00:00    
 (3/5): which-2.21-10.el8.x86_64.rpm             294 kB/s |  49 kB     00:00    
 (4/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm  1.6 MB/s | 1.4 MB     00:00    
 (5/5): vim-common-8.0.1763-13.el8.x86_64.rpm    2.1 MB/s | 6.3 MB     00:03    
 --------------------------------------------------------------------------------
 Total                                           1.3 MB/s | 7.8 MB     00:05     
 warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
 CentOS-8 - AppStream                            1.6 MB/s | 1.6 kB     00:00    
 Importing GPG key 0x8483C65D:
  Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
  Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
  From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
 Key imported successfully
 Running transaction check
 Transaction check succeeded.
 Running transaction test
 Transaction test succeeded.
 Running transaction
   Preparing        :                                                        1/1 
   Installing       : which-2.21-10.el8.x86_64                               1/5 
   Installing       : vim-filesystem-2:8.0.1763-13.el8.noarch                2/5 
   Installing       : vim-common-2:8.0.1763-13.el8.x86_64                    3/5 
   Installing       : gpm-libs-1.20.7-15.el8.x86_64                          4/5 
   Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          4/5 
   Installing       : vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
   Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64                  5/5 
   Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64                    5/5 
   Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5 
   Verifying        : vim-common-2:8.0.1763-13.el8.x86_64                    2/5 
   Verifying        : vim-enhanced-2:8.0.1763-13.el8.x86_64                  3/5 
   Verifying        : vim-filesystem-2:8.0.1763-13.el8.noarch                4/5 
   Verifying        : which-2.21-10.el8.x86_64                               5/5 
 ​
 Installed:
   vim-enhanced-2:8.0.1763-13.el8.x86_64 gpm-libs-1.20.7-15.el8.x86_64          
   vim-common-2:8.0.1763-13.el8.x86_64   vim-filesystem-2:8.0.1763-13.el8.noarch
   which-2.21-10.el8.x86_64             
 ​
 Complete!
 Removing intermediate container 7db13d6a1a95
  ---> 46d4742d96c6
 Step 5/8 : RUN yum -y install net-tools
  ---> Running in 3a8b3b61455f
 Last metadata expiration check: 0:00:14 ago on Tue May 26 02:28:01 2020.
 Dependencies resolved.
 ================================================================================
  Package         Architecture Version                        Repository    Size
 ================================================================================
 Installing:
  net-tools       x86_64       2.0-0.51.20160912git.el8       BaseOS       323 k
 ​
 Transaction Summary
 ================================================================================
 Install  1 Package
 ​
 Total download size: 323 k
 Installed size: 1.0 M
 Downloading Packages:
 net-tools-2.0-0.51.20160912git.el8.x86_64.rpm   2.0 MB/s | 323 kB     00:00    
 --------------------------------------------------------------------------------
 Total                                           211 kB/s | 323 kB     00:01     
 Running transaction check
 Transaction check succeeded.
 Running transaction test
 Transaction test succeeded.
 Running transaction
   Preparing        :                                                        1/1 
   Installing       : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
   Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
   Verifying        : net-tools-2.0-0.51.20160912git.el8.x86_64              1/1 
 ​
 Installed:
   net-tools-2.0-0.51.20160912git.el8.x86_64                                     
 ​
 Complete!
 Removing intermediate container 3a8b3b61455f
  ---> 0a0a8b5370f2
 Step 6/8 : EXPOSE 80
  ---> Running in e136862cbcf1
 Removing intermediate container e136862cbcf1
  ---> 28b29770c09a
 Step 7/8 : CMD echo "---end---"
  ---> Running in db998e281478
 Removing intermediate container db998e281478
  ---> e7090ba90a77
 Step 8/8 : CMD /bin/bash
  ---> Running in 291bec834681
 Removing intermediate container 291bec834681
  ---> a68a7a44878e
 Successfully built a68a7a44878e
 Successfully tagged mycentos:0.1
 [root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# docker images
 REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
 mycentos            0.1                 a68a7a44878e        About a minute ago   321MB
 ysl/centos          1.0                 bf97aef123f3        23 hours ago         237MB
 mysql               5.7                 a4fdfd462add        4 days ago           448MB
 nginx               latest              9beeba249f3e        10 days ago          127MB
 centos              latest              470671670cac        4 months ago         237MB

运行

[root@iz2zeaet7s13lfkc8r3e2kz dockerfile]# docker run -it mycentos:0.1
 [root@49326d559289 local]# pwd
 /usr/local

官方的工作目录是 / ,不能使用vim,和ifconfig等命令!我自己的镜像安装了vim,和ifconfig!测试能否使用

docker网络

 #查看当前docker网络
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE
 8ce5d63292ee        bridge              bridge              local
 b01be88b9d12        host                host                local
 54b9e50084dd        none                null                local

网络模式

bridge :桥接 docker(默认)

host :和宿主机共享网络

none :不配置网络

container:容器网络连通(用的少!局限很大!)

自定义网络

 #自定义网络
 ​
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
 ce6c831fa98c8e809096eb37b682abf1ce9b541d73b75f4c7126dfe8748c5971
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network ls
 NETWORK ID          NAME                DRIVER              SCOPE
 8ce5d63292ee        bridge              bridge              local
 b01be88b9d12        host                host                local
 ce6c831fa98c        mynet               bridge              local
 54b9e50084dd        none                null                local
 # 查看信息
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network inspect mynet
 [
     {
         "Name": "mynet",
         "Id": "ce6c831fa98c8e809096eb37b682abf1ce9b541d73b75f4c7126dfe8748c5971",
         "Created": "2020-05-27T16:30:22.691575681+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,
         "Ingress": false,
         "ConfigFrom": {
             "Network": ""
         },
         "ConfigOnly": false,
         "Containers": {},
         "Options": {},
         "Labels": {}
     }
 ]
 ​
 # 用自己的网络启动容器,同一个网络下的容器之间可以互相通过IP或者docker名字ping通
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
 0dcb6a5f014415cb6c98c93c9dac21b7f5cae21df5cc5e42f331cc6e07a1ec93
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
 eec65d6dc9cdad33f85d3874fcf8291ed46c97893ae1298c7d23d9d85e7dda87

同网络下ping测试

 #在默认网络下启动容器
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker run -d -P --name tomcat01

不同网络下ping猜测试

# 测试打通 tomcat01 - mynet
 [root@iz2zeaet7s13lfkc8r3e2kz ysl]# docker network connect mynet tomcat01
 ​
 # 看一下网络信息,这个网络下已经多了一个tomcat01
 docker network inspect mynet

再次ping,可以ping通

实战:docker部署redis集群

架构思路:分片+高可用+负载均衡,启动三台r-m主redis,当有一台挂了,从redis可以变成主redis。

 # 创建网卡
 docker network create --driver bridge --subnet 172.38.0.0/16 --gateway 172.38.0.1 redis

 # 创建六个redis
 #脚本创建创建6个redis目录和相应的配置文件
 for port in $(seq 1 6); 
 do 
 mkdir -p /mydata/redis/node-${port}/conf
 touch /mydata/redis/node-${port}/conf/redis.conf
 cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
 port 6379
 bind 0.0.0.0
 cluster-enabled yes
 cluster-config-file nodes.conf
 cluster-node-timeout 5000
 cluster-announce-ip 172.38.0.1${port}
 cluster-announce-port 6379
 cluster-announce-bus-port 16379
 appendonly yes
 EOF
 done

 # 启动第一个redis
 docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
 -v /mydata/redis/node-1/data:/data \
 -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
 -d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf 

 # 启动第二个redis
 docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
 -v /mydata/redis/node-2/data:/data \
 -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf \
 -d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
 # 剩余依次启动

# 进入容器
 [root@iz2zeaet7s13lfkc8r3e2kz home]# docker exec -it redis-1 /bin/sh
 /data # ls
 appendonly.aof  nodes.conf
 /data # 
 # 创建集群
 /data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15
 :6379 172.38.0.16:6379 --cluster-replicas 1
 >>> Performing hash slots allocation on 6 nodes...
 Master[0] -> Slots 0 - 5460
 Master[1] -> Slots 5461 - 10922
 Master[2] -> Slots 10923 - 16383
 Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
 Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
 Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
 M: f8b07c2dc2cbf74d9939fe62948a8e230f9de319 172.38.0.11:6379
    slots:[0-5460] (5461 slots) master
 M: fa4395001194f42d4b72252f47c9e6fea1e0cda3 172.38.0.12:6379
    slots:[5461-10922] (5462 slots) master
 M: b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf 172.38.0.13:6379
    slots:[10923-16383] (5461 slots) master
 S: 1ad42e97941bc58f6234c711d5619029ef642696 172.38.0.14:6379
    replicates b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf
 S: f96de63ed0a6f75774c1d99f281ca3f001d37932 172.38.0.15:6379
    replicates f8b07c2dc2cbf74d9939fe62948a8e230f9de319
 S: 1e6deeeeccaa0d80caa73fb91b0442849c0356da 172.38.0.16:6379
    replicates fa4395001194f42d4b72252f47c9e6fea1e0cda3
 Can I set the above configuration? (type 'yes' to accept): yes  #输入yes

 # 链接
 /data # redis-cli -c
 127.0.0.1:6379> cluster info    
 cluster_state:ok
 cluster_slots_assigned:16384
 cluster_slots_ok:16384
 cluster_slots_pfail:0
 cluster_slots_fail:0
 cluster_known_nodes:6
 cluster_size:3
 cluster_current_epoch:6
 cluster_my_epoch:1
 cluster_stats_messages_ping_sent:339
 cluster_stats_messages_pong_sent:327
 cluster_stats_messages_sent:666
 cluster_stats_messages_ping_received:322
 cluster_stats_messages_pong_received:339
 cluster_stats_messages_meet_received:5
 cluster_stats_messages_received:666
 ​
 127.0.0.1:6379> cluster nodes   
 fa4395001194f42d4b72252f47c9e6fea1e0cda3 172.38.0.12:6379@16379 master - 0 1590634161065 2 connected 5461-10922
 b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf 172.38.0.13:6379@16379 master - 0 1590634161000 3 connected 10923-16383
 f96de63ed0a6f75774c1d99f281ca3f001d37932 172.38.0.15:6379@16379 slave f8b07c2dc2cbf74d9939fe62948a8e230f9de319 0 1590634161567 5 connected
 f8b07c2dc2cbf74d9939fe62948a8e230f9de319 172.38.0.11:6379@16379 myself,master - 0 1590634160000 1 connected 0-5460
 1ad42e97941bc58f6234c711d5619029ef642696 172.38.0.14:6379@16379 slave b744ebd8a33916992fc5f8161ac9efdf4fe1cdcf 0 1590634159562 4 connected
 1e6deeeeccaa0d80caa73fb91b0442849c0356da 172.38.0.16:6379@16379 slave fa4395001194f42d4b72252f47c9e6fea1e0cda3 0 1590634160000 6 connected
 # 现在有三个主机master 三个从机slave

测试,set一个值

发现处理的是 12 ,吧 12 的这个容器关掉

再去get这个值,看看能不能取到

发现 这个值是在16 get到的,16 本是从机,12停掉后16就变为了主机

完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值