【Docker】docker快速串讲

云平台

公有云

  • 成本更低:无需购买硬件或软件,仅对使用的服务付费。
  • 无需维护:维护由服务提供商提供。
  • 近乎无限制的缩放性:提供按需资源,可满足业务需求。
  • 高可靠性:具备众多服务器,确保免受故障影响。
    • 可用性: N个9 全年的故障时间: 365243600*(1-99.9999%)

私有云

  • 灵活性更强:组织可自定义云环境以满足特定业务需求。
  • 控制力更强:资源不与其他组织共享,因此能获得更高的控制力以及更高的隐私级别。
  • 可伸缩性更强:与本地基础结构相比,私有云通常具有更强的可伸缩性。

vpc

作用是划分网段

192.168.0.0/16

11000000.10101000.00000000.00000000/16 表示可用网段范围:192.168.0.0-192.168.255.255 其中0.0与255.255不可用


docker

参考文献:https://docs.docker.com/engine/install/centos/

移除之前的docker相关包

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

配置yum源

sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# docker-ce->社区版

#以下是在安装k8s的时候使用
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7  containerd.io-1.4.6

启动

systemctl start docker
systemctl enable docker --now  开机自启动,并且当下立刻启动

配置加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://{自己的加速器地址}.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

测试

docker version

常用命令

  • 镜像相关

    • docker pull

      # docker pull 镜像名:版本名(标签)
      docker pull nginx  #下载最新版
      docker pull nginx:1.20.1
      
    • docker images

      # 下载来的镜像都在本地
      docker images  #查看所有镜像
      
    • docker rmi

      # 删除镜像
      docker rmi 镜像名:版本号/镜像id
      

  • 启动容器相关

    • docker run

      # 启动nginx应用容器
      docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
      docker run  设置项   镜像名  镜像启动运行的命令(镜像里面默认有的,一般不会写)
      
      docker run --name=mynginx -d --restart=always -p  88:80 nginx
      """
      -d:后台运行
      --restart=always: 开机自启
      -p 88:80: 映射88端口,测试的访问
      --name=mynginx: 给容器起个名字
      """
      
    • docker ps

      # 查看正在运行的容器
      docker ps
      
      # 查看所有
      docker ps -a
      
    • docker rm

      # 删除停止的容器
      docker rm  容器id/名字
      
      # 强制删除正在运行中的
      docker rm -f mynginx
      
    • docker stop/start/restart 容器id/名字

      # 停止容器
      docker stop 容器id/名字
      
      # 再次启动
      docker start 容器id/名字
      
      # 重启启动
      docker restart 容器id/名字
      
      # 应用开机自启
      docker update 容器id/名字 --restart=always
      

  • 修改容器内容

    • 进容器内部修改

      # 进入容器内部的系统,修改容器内容
      docker exec -it 容器id  /bin/bash
      
    • 挂载数据卷

      docker run --name=mynginx   \
      -d  --restart=always \
      -p  88:80 -v /data/html:/usr/share/nginx/html:ro  \
      nginx
      
      # 修改页面只需要去 主机的 /data/html
      # ro: 只读模式
      

  • 打包分享

  • 旧容器commit生成新容器

    # docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    docker commit -a "alan"  -m "首页变化" 341d81f7504f linginx:v1.0
    
  • 容器传输|容器tag新镜像

    • 方式一:docker save 打包

      # 将镜像保存成压缩包
      docker save -o abc.tar linginx:v1.0
      
      # 别的机器加载这个镜像
      docker load -i abc.tar
      
      # 离线安装  	
      
    • 方式二:docker hub 推送

      # 本地容器打包生成镜像
      docker tag local-image:tagname new-repo:tagname
      
      # 登录到docker hub
      docker login       
      
      # 推送
      docker push new-repo:tagname
      
      # 推送完成镜像后退出
      docker logout
      
      # 别的机器下载
      docker pull new-repo:tagname
      

  • 其他-logs、cp

    • 日志

      docker logs 容器名/id   排错
      
    • 容器内外数据传输

      # 把容器指定位置的东西复制出来 
      docker cp mynginx:/etc/nginx/nginx.conf  /data/conf/nginx.conf
      
      # 把外面的内容复制到容器里面
      docker cp  /data/conf/nginx.conf  mynginx:/etc/nginx/nginx.conf
      

Dockerfile构建镜像

命令学习链接:https://docs.docker.com/engine/reference/builder/

未使用Docker

  • SpringBoot打包成可执行jar
  • 把jar包上传给服务
  • 服务器运行java -jar

使用Docker

  • 编辑Dockerfile

    FROM openjdk:8-jdk-slim
    LABEL maintainer=alan  # 作者
    
    COPY target/*.jar   /app.jar
    
    ENTRYPOINT ["java","-jar","/app.jar"]
    # 启动命令,或者CMD ["java","-jar","/app.jar"],或者RUN java -jar /app.jar
    
  • 构建容器

    docker build -t java-demo:v1.0 .
    
  • 启动容器

    docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 
    

中间件redis

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

# redis使用自定义配置文件启动
docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis:latest  redis-server /etc/redis/redis.conf

compose容器编排

学习链接:https://docs.docker.com/compose/compose-file/compose-file-v3/

安装

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

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

docker-compose --version

卸载

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

常见命令

命令 说明
docker-compose -h 查看帮助
docker-compose up 启动所有docker-compose服务
docker-compose up -d 启动所有docker-compose服务并后台运行
docker-compose down 停止并删除容器、网络、卷、镜像
docker-compose exec yml里面的服务id 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps 展示当前docker-compose编排过的运行的所有容器
docker-compose top 展示当前docker-compose编排过的容器进程
docker-compose logs yml里面的服务id 查看容器输出日志
docker-compose config 检查配置
docker-compose config -q 检查配置,有问题才有输出
docker-compose restart 重启服务
docker-compose start 启动服务
docker-compose stop 停止服务

示例

  • docker-compose.yml文件编辑
version: '3'
services:
  redis:
    image: daocloud.io/redis:3
    container_name: featech_redis
    command: redis-server
    volumes:
      - ./deployment/redis/data:/data  # 挂载数据库数据文件夹
    ports:
      - "6373:6379"
    restart: always # always表容器运行发生错误时一直重启
  
  db:
    image: mysql:5.7
    container_name: featech_db
    ports:
      - "3303:3306"
    volumes:
      - ./deployment/mysql/data:/var/lib/mysql # 挂载数据库数据
      #    - ./deployment/mysql/conf/my.cnf:/etc/mysql/my.cnf # 挂载配置文件
      - ./deployment/mysql/init:/docker-entrypoint-initdb.d/ # 挂载数据初始化sql脚本
    
    environment:
      MYSQL_ROOT_PASSWORD: 12345678  # 数据库密码
      MYSQL_DATABASE: fetach_v2_0  # 数据库名称
      LNAG: C.UTF-8
    command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
  web:
    build: .
    container_name: featech_v2_0
    
    # tty: true  如果web容器出错想进入容器做修改时,此配置可分配一个伪终端让容器先运行起来
    
    # 容器启动后启动通过uwsgi启动django应用并启动celery,这里我简单实用了nohup启动celery,可选择使用supervisor管理
    command: uwsgi --ini uwsgi && nohup celery -A celery_tasks.sms.tasks worker -l info >> celery_log/celery.log 2>&1 &
    
    depends_on:
      - db
      - redis
      - mongo
    links:
      - db
      - redis
      - mongo
    volumes:
      - ./featech_v2_0:/featech_v2_0  # 挂载项目目录
    restart: always
    ports:
      - "8888:8888"
  nginx:
    build: deployment/nginx
    container_name: featech_nginx
    ports:
      - "80:80"
      - "443:443"
    expose:
      - "8888"
    volumes:
      - ./featech_v2_0/static:/usr/share/nginx/html/static # 挂载静态文件
      - ./featech_v2_0/frontEnd:/usr/share/nginx/html/frontEnd # 挂载静态文件
      - ./featech_v2_0/media:/usr/share/nginx/html/upload # 挂载上传文件
      - ./deployment/nginx/ssl:/usr/share/nginx/ssl # 挂载ssl证书目录
      - ./deployment/nginx/conf/conf.d:/etc/nginx/conf.d # 挂载配置文件
    links:
      - web
    depends_on:
      - web
    restart: always
  mongo:
    image: mongo:4.0
    container_name: featech_mongo
    hostname: mongo
    restart: always
    ports:
      - "27013:27017"
    environment:
      TZ: Asia/Shanghai
    #MONGO_INITDB_DATABASE: test
    #MONGO_INITDB_ROOT_USERNAME: root
    #MONGO_INITDB_ROOT_PASSWORD: 123456
    volumes:
      - /etc/localtime:/etc/localtime
      - ./deployment/mongo/data:/data/db
      - ./deployment/mongo/init:/docker-entrypoint-initdb.d/
    command: mongod
# 构建镜像
使用命令docker build -t chenhao_flask:test .

# 启动镜像
使用命令docker compose up -d 

猜你喜欢

转载自blog.csdn.net/al6nlee/article/details/130304924
今日推荐