Docker

LiCheng2022年7月6日大约 3 分钟

Docker

介绍

  • 2019
  • 一种容器化技术,更快更方便的部署

安装

  • ubuntu20: snap install docker

  • docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
  • docker-compose
#可能需要切换到root用户下执行, v2.6.1 这个得去github找最新版
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.6.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
  • 备注:有的系统需要手动启动
systemctl start docker.service
systemctl enable docker.service
systemctl daemon-reload #重启
  • 手动配置镜像源
  • vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://almtd3fa.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn"]
}

常用命令

  • docker
docker exec nest_mongo sh mongo.sh #执行容器内的脚本
docker exec nest_mongo /bin/bash #进入容器

docker save nginx-device:v1 > nginx.tar.gz #docker导出
docker load -i nginx.tar.gz #docker导入(-i带标签和版本)
docker build -t nest-sheet:v1 #docker构建(.必需)

docker ps #查看容器
docker rm #删除没有运行的容器,-f参数,删除正在运行的容器
  • docker-compose
docker-compose up -d     #运行
docker-compose down      #停止删除
docker-compose start     #启动容器
docker-compose stop      #停止
docker-compose restart   #重启
docker-compose logs -f   #查看日志
  • 清理
#删除所有的none镜像
docker images  | grep none | awk '{print $3}' | xargs docker rmi
#删除没有使用的镜像
docker image prune -a

配置镜像源

  • 在/etc/docker目录下创建daemon.json文件,阿里云
  • 创建文件: vim /etc/docker/daemon.json
  • 配置内容

提示

{ "registry-mirrors": ["https://almtd3fa.mirror.aliyuncs.com"] }

运行镜像

Mongodb

use admin
db.createUser({'user':'root','pwd':'123456','roles':[{role:'root',db:'admin'}]})

Mysql

  • docker run -d -p 3306:3306 --name mysql-dev -e MYSQL_ROOT_PASSWORD=root mysql:5.7
  • docker run -d -p 3306:3306 --name mysql-dev -e MYSQL_ROOT_PASSWORD=root mysql:8.0.29
  • docker-compose
version: "3.7"
services:
  mysql-dev:         #服务名
    restart: always #跟随docker启动
    image: mysql:8.0.29   #拉取镜像
    container_name: mysql-dev #容器名
    ports:          #端口映射 本地:容器
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root #密码
      - TZ=Asia/Shanghai         #时区
    #volumes: 
    #  - /data/mysql/data:/var/lib/mysql # 映射数据卷
    #  - ./sql:/sql #备份sql保存目录
    #  - ./backup.sh:backup.sh #备份脚本 

提示

开启远程访问

docker exec -it mysql-dev  bash
mysql -uroot -proot

#mysql8执行
GRANT ALL ON *.* TO 'root'@'%';
#一个比较通用的解决方法

USE mysql;
update user set Host="%" where User="root";
select User,authentication_string,Host from user;
flush privileges;
  • 基本脚本导入sql
mysql -uroot -p$password <<EOF
CREATE DATABASE nest_common_dev;
USE nest_common_dev;
source /root/sql/nest_struct.sql;
source /root/sql/init.sql;
USE mysql;
update user set Host="%" where User="root";
select User,authentication_string,Host from user;
flush privileges;
EOF

Redis

docker run -d --name redis-dev -p 6379:6379 redis:7.0.2 --requirepass "root" #选择版本运行 redis:5.0.6,--requirepass设置密码
                                                
docker exec -it redis-dev  /bin/bash    #进入redis的shell
redis-cli                               #进入redis    
命令     AUTH root                       #登入
        get  key                        #获取
        set  key value                  #set
        keys *                          #查看所有

PostgresSql

  • docker run --name some-postgres -p 5432:5432 -e POSTGRES_PASSWORD=root -d postgres

Rabbitmq

  • docker run -d --name rabbitmq-dev -p 15672:15672 -p 5672:5672 rabbitmq:management

RocketMq

  • 暂不需要

Nacos

Seata

Ubuntu

  • docker pull ubuntu:22.04

Python

  • docker pull python:3.9.13

Go部署

  • 镜像
  • docker pull golang:1.19.0

docker-compose部署

version: "3.7"
services:
  go-dev:         #容器名
    restart: always #跟随docker启动
    image: ubuntu:22.04   #拉取镜像
    container_name: go-dev #容器名
    ports:          #端口映射 本地:容器
      - "8999:8999"
    volumes:        #数据映射必须绝对路径 本地:容器
      - ./main:/main #示例目录必须存在
      - ./application.yml:/application.yml #外部配置文件
      - /etc/localtime:/etc/localtime
      - /etc/timezone:/etc/timezone
    entrypoint: ./main #启动参数覆盖

Java部署

docker-compose部署

提示

主要配置文件

version: "3.7"
services:
  java-dev:         #容器名
    restart: always #跟随docker启动
    image: openjdk:17.0-oracle   #拉取镜像
    container_name: java-dev #容器名
    ports:          #端口映射 本地:容器
      - "9999:9999"
    volumes:        #数据映射必须绝对路径 本地:容器
      - /etc/localtime:/etc/localtime
      - /etc/timezone:/etc/timezone
      - ./app:/app
    #  - ./file:/file 
    entrypoint: sh -c "cd app &&  java -server -Xms128m -Xmx128m -jar app.jar" # app.jar是你在当前app目录下的jar包名