docker笔记

安装

  • windows安装

    • 打开wsl2 这里要 确定windows版本
      • 设置 - windows更新 - 开发者选项 - 开发人员模式(开启)
    • 控制面板开启子系统
      • 启用或关闭windows功能-适用于linux的子系统(勾选)
    • Microsoft Store下载ubuntu18
      • 开始菜单找到Microsoft Store 搜搜ubuntu下载下来就行
    • 安装docker
      -https://dockerdocs.cn/docker-for-windows/install/index.html
  • mac安装 直接在应用商店找docker就行

  • 在Linux或Windows上安装Docker,以便在其上部署容器化应用程序。
    详细
    curl -sSL https://get.daocloud.io/docker | sh

docker run -d -p 6379:6379 --name redis redis:latest
// docker 
run 运行一个软件
 -d后台运行 
 -p 容器里面的6379暴露到宿主机6379
 --name 容器命名
 redis:latest 版本 正式的话最好固定一个版本 最新版本经常变化

镜像

  • 查看镜像
    • docker search 镜像名:tag tag就是具体的标签版本 也可以不加
    • docker images // 查看镜像
    • docker images ls
    • docker images centos // 查看本地centos相关的镜像
    • docker images redis -q // -q 只查看id
    • docker pull // 拉取镜像
    • docker search redis // 搜索仓库的redis hub.docker.com
    • 删除镜像
      • docker rmi hello-world
      • 被删除的镜像,不得有依赖的容器记录 docker ps -a 可以查看容器记录 ,docker rm 容器id删除容器记录
    • 导出镜像
      • docker image save centos:latest > /opt/centos-latest-test01.tgz
    • 导入镜像
      • docker image load -i /opt/centos-latest-test01.tgz
    • 查看镜像详细信息
      • docker image inspect 镜像id

容器(镜像运行起来之后就叫容器)

注意:

  1. 容器内的进程必须处于前台运行状态,否则容器就会直接退出,自己部署一个容器运行,命令不得后台运行,前台运行即可
  2. 如果容器内什么事情都没做,容器就会刮掉,容器内必须有一个进程
  • docker run 镜像名
    - 如果镜像不存在本地,则会在线去下载该镜像
    - docker run centos:7 这个写法会产生多条容器记录,且容器没有在本地跑,所以挂了
    • docker ps // 查看当前是否有容器在运行中 报错的话说明docker没有启动
    • docker stop 容器id
    • docker run -it 容器id bash // 进入容器内部 -i 交互式命令操作 -t开启一个终端 bash 进入容器后执行的命令
      • centos 可以使用cat /etc/redhat-release 查看系统版本 这个时候使用uname -a没用
      • ubuntu 可以使用 cat /etc/lsb-release 查看系统版本
      • opensuse系统 cat /etc/SuSE-release
      • exit 退出容器
    • 开启一个活着的容器 docker ps可以看到的容器 -d参数 让容器后台跑(针对宿主机而言)
      • docker run -d centos:latest ping baidu.com
    • 丰富docker 运行参数
      • –rm 容器挂掉后自动删除 一般用作测试
      • –name aaa // 给容器起名字 aaa
    • 查看容器日志
      • docker logs -f 容器id // docker logs -f 80f // -f 刷新日志
      • docker logs -f 80f | tail -5
    • 进入正在运行的容器内
      • docker exec -it 80f bash
    • 查看容器详细信息
      • docker container inspect 容器id
    • 容器的端口映射 -p 宿主机端口:容器内暴露的端口
      • nginx -d后台 --name 起名字 ,-p 宿主机的85端口访问容器内的80端口
        • docker run -d --name uicheung_nginx -p 85:80 nginx
      • 查看端口转发情况 docker port 容器id
      	root@uicheung-virtual-machine:~# docker port e7f
      	80/tcp -> 0.0.0.0:85 // 容器内的80转发到85端口
      	80/tcp -> [::]:85
      
    • 映射到一个没有被占用的随机端口 大写-P
      • docker run -d --name uicheung_nginx01 -P nginx
        // 从宿主机的32768端口访问容器内的80端口
        在这里插入图片描述
    • -e 指定环境变量
    • 删掉所有的容器 docker rm -f ${docker ps -qa}

dockerfile指令

  • 主要组成部分
    • 基础镜像信息 FROM centos:7.8
    • 制作镜像操作指令 RUN yum install openssh-server -y
    • 容器启动时指令 CMD [“/bin/bash”]
  • dockerfile指令
    • FROM 这个镜像的妈妈是谁
    • MAINTAINER 指定维护者信息 可以没有
    • RUN 你想让他干啥
    • ADD 添加宿主机的文件到容器,还多了一个自动解压功能
    • COPY 作用和ADD是一样的,都是添加宿主机的文件到容器,COPY仅仅拷贝,ADD还多了一个自动解压功能
    • WORKDIR 设置当前工作目录
    • VOLUME 设置卷,挂载主机目录
      容器在运行时,应该保证在存储层不写入任何数据,运行在容器内产生的数据,我们推荐是挂在在宿主机上维护
      VOLUME /data # 将容器内的/data的文件夹挂在为匿名卷,任何向该目录写入的数据的操作,都不会被容器记录,保证容器存储层无状态理念
      VOLUME [“/data1”,“/data2”] # 该容器运行及时 自动与宿主机的目录做好映射关系
    • EXPOSE 指定对外的端口 在容器内暴露一个窗口
    • ENV 设置环境变量,无论是在镜像构建时,还是容器运行,该变量都可以使用 $NAME使用
      ENV NAME=“uicheung”
      ENV MYSQL_VERSION=5.6
      RUN yun install mysql:$MYSQL_VERSION
    • ARG 设置环境变量,只是用于构建镜像需要设置的变量,容器运行时就消失了
    • ENTRYPOINT
    • CMD 在容器内运行某命令 CMD [“参数1”,“参数2”]
      例如 docker run -it centos:7 cat /etc/os-release CMD [“cat”," /etc/os-release"]
      CMD systemctl start nginx 这样写是错误的,容器会立即退出,docker容器必须要有一个前台运行的进程
      CMD 【“nginx”,“-g”,“daemon off;”】才是正确的

dockerfile实战

  1. 编写dockerfile文件
FROM node:16-alpine3.15
RUN mkdir -p /home/app/
WORKDIR /home/app/
COPY package*.json ./
RUN npm config set registry  https://registry.npm.taobao.org/
# 安装pnpm
RUN npm install -g pnpm
RUN npm install -g pm2
RUN pnpm install
COPY . .
EXPOSE 3000
ENTRYPOINT ["npm", "run"]
CMD ["start:pm2:prod"]
  1. 构建镜像
    docker build -f ./Dockerfile -t cheung-admin:0.0.2 .

  2. 运行容器
    docker run -d -e NODE_ENV=production -p 3000:3000 cheung-admin:0.0.2

  3. 访问测试

Docker-Compose

负责对多个docker容器快速编排(站在项目角度将一组相关容器整合在一起,对这组容器进行按照指定顺序启动)

version: "3"
services:
  cheungAdmin-service-dev:
    container_name: cheungAdmin-service-dev
    build:
      context: ./
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      RUNNING_ENV: 'dev'
    networks:
      - servicebus

  mysql:
    image: mysql:5.7
    container_name: mysql
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: cheung_admin
    ports:
      - "3306:3306"
    volumes:
      - ./data/mysql/data:/var/lib/mysql
      - ./deploy/sql/:/docker-entrypoint-initdb.d/
    privileged: true
    restart: always

  redis:
    image: redis:6.2.5
    container_name: redis
    ports:
      - "6379:6379"
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./data/redis/data:/data:rw
    command: "redis-server --requirepass 123456  --appendonly yes"
    privileged: true
    restart: always

networks:
  servicebus:
    name: servicebus

安装

windows 和mac安装docker会默认安装Docker-Compose,linux没有

  • 从github上下载docker-compose二进制文件安装

    • 下载最新版的docker-compose文件
      sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
    • 添加可执行权限
      sudo chmod +x /usr/local/bin/docker-compose
    • 测试安装结果
      docker-compose --version
  • pip安装
    sudo pip install docker-compose

Portainer

官方安装说明 portainer.io/installation
完整教程 https://zhuanlan.zhihu.com/p/530337389

生命周期

在这里插入图片描述

其他

  • 常用容器
nginx: docker run -d centos:latest ping baidu.com
  • Docker修改镜像仓库地址
  1. 修改配置文件
    编辑配置文件,没有就创建一个
    vim /etc/docker/daemon.json
    文件内容如下:
    {
      "registry-mirrors": [
    		“https://8x”
        ]
    }
    
    这里的仓库地址可以写多个
    2. 重启docker
    	systemctl daemon-reload
    	systemctl restart docker
    	systemctl status docker
    
    查看一下结果
    docker info
    看到已经配置成功了
  • 查看宿主机ip地址ip a

  • 在这里插入图片描述

  • 连接服务器
    ssh root@ip地址 // 如 ssh root@324.234.326.222回车之后输密码

  • linux查看系统信息 可以用于区分是否宿主机
    1.uname -a (Linux查看版本当前操作系统内核信息)
    uname -r : 显示操作系统的发行版号
    2.cat /proc/version (Linux查看当前操作系统版本信息)
    3.cat /etc/issue 或cat /etc/redhat-release(Linux查看版本当前操作系统发行版信息)
    4.cat /proc/cpuinfo
    lscpu (Linux查看cpu相关信息,包括型号、主频、内核信息等)
    5.getconf LONG_BIT (Linux查看版本说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
    6.hostname (查看服务器名称)
    7.cat /etc/sysconfig/network-scripts/ifcfg-eth0
    cat /etc/sysconfig/network-scripts/ifcfg-l0
    ifconfig (查看网络信息)
    8.lsblk (查看磁盘信息 – 列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息)
    fdisk -l (观察硬盘实体使用情况,也可对硬盘分区)
    df -k (用于显示磁盘分区上的可使用的磁盘空间)

  • pm2常用指令

PM2常用命令:
pm2 start <script_file|config_file> [options] 启动指定应用,如pm2 start index.js --name httpServer;

pm2 stop <appName> [options] 停止指定应用,如pm2 stop httpServer;

pm2 list  把所有pm2启动实例列举出来,注意:pm2 stop 某个项目后,该项目还会存在pm2 list 的列表里面, 只是状态是 stop, 要想去掉该项目,用pm2 delete
pm2 reload|restart <appName> [options]  重启指定应用,如pm2 restart httpServer;

pm2 show <appName> [options] 显示指定应用详情,如pm2 show httpServer;

pm2 delete <appName> [options] 删除指定应用,如pm2 delete httpServer,如果修改应用配置行为,最好先删除应用后,重新启动方才生效,如修改脚本入口文件;

pm2 kill 杀掉pm2管理的所有进程;

pm2 logs <appName>  查看指定应用的日志,即标准输出和标准错误;

pm2 monit 监控各个应用进程cpu和memory使用情况;

pm2 startOrReload <appName> 如果项目没有启动就执行 start  如果项目正在运行 就执行relaod
提示 除了使用 appName 之外, 还可以使用 all: 全部程序     id: 该程序的 id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值