Docker简介

什么是Docker

首先,我们先来看几个问题:
1.合作开发的时候,在本机可以跑,别人的电脑跑不起来

这里我们拿Java Web应用程序举例,我们一个Java Web应用程序涉及很多东西,比如JDK、
tomcat、spring等等。当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情
况。Docker则将程序直接打包成镜像,直接运行在容器中即可。

2.服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了

这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程
序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就
会受到其他程序的干扰,导致自己的程序出现问题。Docker就很好解决了环境隔离的问题,别人程序不
会影响到自己的程序。

3.公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器

在没有Docker的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,
而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用Docker的话,我只
需要将程序打包到镜像,你要多少台服务,我就给你跑多少容器,极大地提高了部署效率。

官网的介绍是“Docker is the world’s leading software container platform.”官方给Docker的定位是一
个应用容器平台。
Docker 是一个开源的应用容器引擎,诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后
改名为Docker Inc);
Docker 可以让开发者打包他们的应用,以及依赖包到一个轻量级、可移植的容器中,然后发布到任何
流行的 Linux 机器上。Docker容器是完全使用沙箱机制,相互隔离,性能开销也极低。
从 17.03 版本之后,Docker分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业
版)
Docker通俗的讲是服务器中高性能的虚拟机,可以将一台物理机虚拟N多台虚拟机的机器,互相之间隔
离,互不影响。
想要搞懂Docker,其实看它的两句口号就行。
第一句,是“Build, Ship and Run”。
也就是,“搭建、发送、运行”,三板斧。

安装

  • 环境配置
    • 3.10.0-1160.21.1.el7.x86_64以上
  • 需要的安装包
    • yum install -y yum-utils
  • 使用阿里国内源安装docker
  • 安装docker引擎 docker-ce社区
    • yum install docker-ce docker-ce-cli containerd.io
  • 启动docker
    • systemctl restart docker
  • 使用docker命令
    • docker version
  • 运动hello-world镜像
    • image.png
  • 查看安装的镜像
    • docker images
  • 下载docker
    • yum remove docker-ce docker-ce-cli containerd.io
    • 删除资源:rm -rf /var/lib/docker
  • 镜像加速

下载运用程序

  • 云主机配置
    • 为什么关闭selinux?selinux是Centos自带的安全服务,因为晦涩难用,并且跟很多程序冲突,所以强烈关闭该服务,/etc/sysconfig/selinux文件,把其中的selinux设置为disabled
  • 配置MySQL

    • 拉取镜像:docker pull mysql:8.0.23
      1. docker run -it -d --name mysql --net=host //网络容器之间
      2. -m 500m
      3. -v /root/mysql/data:/var/lib/mysql //挂载sql数据目录到linux主机的/root/mysql/data下
      4. -v /root/mysql/config:/etc/mysql/conf.d //挂载sql配置文件到linux主机的/root/mysql/config下
      5. -e MYSQL_ROOT_PASSWORD=Pw_123456 //配置容器中的mysql密码
      6. -e TZ=Asia/Shanghai mysql:8.0.23 //配置时区
      7. --lower_case_table_names=1 //配置查询数据库表查询表的时候忽视大小写
  • 配置docker

    • 拉取镜像:docker pull mongo:4.4.7 ```git net: port: 27017 bindIp: “0.0.0.0” //允许远端连接

storage: dbPath: “/data/db” //存储的数据目录

security: authorization: enabled //用户名密码的登录

  1. ```git
  2. docker run -it -d --name mongo
  3. --net=host
  4. -v /root/mongo:/etc/mongo
  5. -v /root/mongo/data/db:/data/db
  6. -m 500m
  7. -e MONGO_INITDB_ROOT_USERNAME=admin
  8. -e MONGO_INITDB_ROOT_PASSWORD=Pw_123456
  9. mongo:4.4.7 --config /etc/mongo/mongod.conf
  • 配置Redis环境
    • 拉取redis :docker pull redis:6.0.10
      1. bind 0.0.0.0
      2. protected-mode yes
      3. port 6379
      4. tcp-backlog 511
      5. timeout 0
      6. tcp-keepalive 0
      7. logLevel notice
      8. logfile ""
      9. databases 4
      10. save 900 1
      11. save 300 10
      12. save 60 10000
      13. stop-writes-on-bgsave-error yes
      14. rdbcompression yes
      15. rdbchecksum yes
      16. dbfilename dump.rdb
      17. dir ./
      18. requirepass Pw_123456
      ```shell docker run -it -d —name redis -m 300m —net=host \

      -v /root/redis/conf:/usr/local/etc/redis redis:6.0.10 \ redis-server /usr/local/etc/redis/redis.conf

  1. - 配置rabbitmq
  2. - 拉取镜像:docker pull rabbitmq
  3. ```shell
  4. docker run -it -d --name mq -m 300m --net=host rabbitmq

配置nginx

  1. docker run -it -d --name nginx -m 200m --net=host \
  2. > -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
  3. > -v /root/nginx/html:/usr/share/nginx/html:ro \
  4. > nginx:1.21.3