2022-03-08-docker基础

1. 基本概念

1.1 linux 安装 docker

  1. 自动安装 docker
1
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2. dockerfile

2.1 单文件构建

在多阶构建出来之前使用单个文件进行构建,单文件就是将所有的构建过程(包括项目的依赖、编译、测试、打包过程)全部包含在一个 Dockerfile 中之下

2.2 多文件构建

  • Dockerfile.run 就是运行时程序所必须需要的一些组件的 Dockerfile,它包含了最精简的库;
  • Dockerfile.build 只是用来构建,构建完就没用了;
  • build.sh 的功能就是将 Dockerfile.run 和 Dockerfile.build 进行组成,把 Dockerfile.build 构建好的东西拿出来,然后再执行 Dockerfile.run,算是一个调度的角色。

2.3 多阶构建

完成多阶段构建我们只需要在 Dockerfile 中多次使用 FORM 声明,每次 FROM 指令可以使用不同的基础镜像,并且每次 FROM 指令都会开始新的构建,我们可以选择将一个阶段的构建结果复制到另一个阶段,在最终的镜像中只会留下最后一次构建的结果,这样就可以很容易地解决前面提到的问题,并且只需要编写一个 Dockerfile 文件。

// 守护进程,容器内进程关闭则容器销毁。

CMD nginx -g ‘daemon off;’

2.4 dockerfile 编写

Dockerfile 中 ADD 和 COPY

打包 + nginx 部署

  • 生成 dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM node:10-alpine

ENV PROJECT_ENV production
ENV NODE_ENV production

WORKDIR /code

# 首次添加此两个文件,充分利用缓存
ADD package.json package-lock.json /code
ADD . /code
RUN npm install && npm run build && npm install -g http-server
EXPOSE 80

CMD http-server ./public -p 80
//ps: 每一个指令的前缀都必须是大写的。
  • 打镜像 docker build
1
2
3
4
5
6
7
8
9
10
docker build -t zyx-nginx .
// 如果需要使用非根目录下 dockerfile 的目录和名字 可以加 -f参数
docker build -t zyx-nginx . -f ./devops/dockerfile.nginx

docker build [OPTIONS] PATH | URL | -

docker build -t openresty:1.15.8.2 -f ./Dockerfile .

docker build -t zyx-nginx . -f ./devops/dockerfile

  • 运行容器
1
docker run --name zyx-nginx-ct -d -p 8080:80 zyx-nginx
  • ADD 和 COPY: 将文件或目录复制到 Dockerfile 构建的镜像中
  • EXPOSE: 指定运行该镜像的容器使用的端口,可以是多个。
  • RUN : 指令告诉 docker 在镜像内执行命令
  • FROM :通过 FROM 指定的镜像名称,这个镜像称之为基础镜像,必须位于第一条非注释指令
  • WORKDIR: 在容器内部设置工作目录

3. docker 常用指令

列出所有容器 ID

1
docker ps -aq

查看所有运行或者不运行容器

1
docker ps -a

停止所有的 container(容器),这样才能够删除其中的 images:

1
docker stop $(docker ps -a -q) 或者 docker stop $(docker ps -aq)

如果想要删除所有 container(容器)的话再加一个指令:

1
docker rm $(docker ps -a -q) 或者 docker rm $(docker ps -aq)

查看当前有些什么 images

1
docker images

删除 images(镜像),通过 image 的 id 来指定删除谁,重复时 加上 tag

1
docker rmi <image id>

想要删除 untagged images,也就是那些 id 为的 image 的话可以用

1
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部 image(镜像)的话

1
docker rmi $(docker images -q)

强制删除全部 image 的话

1
docker rmi -f $(docker images -q)

从容器到宿主机复制

1
2
docker cp tomcat:/webapps/js/text.js /home/admin
docker cp 容器名: 容器路径 宿主机路径

从宿主机到容器复制

1
2
docker cp /home/admin/text.js tomcat:/webapps/js
docker cp 宿主路径中文件 容器名 容器路径

删除所有停止的容器

1
docker container prune

删除所有不使用的镜像

1
2
docker image prune --force --all
或者docker image prune -f -a

停止、启动、杀死、重启一个容器

1
2
3
4
docker stop Name或者ID
docker start Name或者ID
docker kill Name或者ID
docker restart name或者ID

docker 进入容器,查看配置文件

1
2
3
4
5
docker exec :在运行的容器中执行命令
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN(标准输入) 打开,以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
docker exec -it f94d2c317477 /bin/bash
1
2
3
4
5
6
7
8
9
exportimport 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。

你的 dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。

快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。

docker save 保存的是镜像(image),docker export 保存的是容器(container);
docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像;
docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。

4. 企业级镜像仓库

Harbor 镜像仓库 搭建

Harbor 基本使用

5. docker 上传镜像

docker commit 容器 id blowsysun/nginx_vue

docker push blowsysun/nginx_vue

docker inspect

mysql 安装

mysql 安装参考文档

最新版本

docker pull mysql

5.7 版本 本文基于 5.7 版本

docker pull mysql:5.7

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d \
-p 3306:3306 \
--name mysql \
-e MYSQL_ROOT_PASSWORD=jueduianquan996 \
mysql:5.7

docker exec -it mysql bash

mysql -uroot -p
# Enter password:

# mysql> show variables like '%datadir%';
show variables like '%datadir%';

拷贝容器配置文件

1
docker cp mysql:/etc/mysql /usr/local/mysql/conf

mysql 容器的配置文件存在 /etc/mysql 下

映射 数据 文件吗

  • /etc/mysql 为配置文件路径
1
2
3
4
5
6
7
8
9
10
11
docker stop mysql
docker rm mysql

docker run -d \
-p 3306:3306 \
--name mysql \
-v /usr/local/mysql/conf/mysql:/etc/mysql \
-v /usr/local/mysql/data:/var/lib/mysql/ \
-e MYSQL_ROOT_PASSWORD=jueduianquan996 \
--restart always \
mysql:5.7

修改 mysql 密码

1
set password for 用户名@localhost = password(‘新密码’);

问题

  1. navicat 无法远程连接 mysql,
  • 开启 MySQL 远程访问权限 允许远程连接
  • 轻量服务器开通 3306 端口访问

查看 容器映射地址

// 找到运行中的容器 id
docker ps
docker inspect 容器 Id

找到 HostConfig 字段

轻量服务器安装

unbuntu

  1. 安装 git

  2. 安装 docker

  3. 安装 nvm

1
2
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash
source ~/.bashrc
  1. 安装 nodejs
1
nvm install v16.18.1
  1. 安装 pm2
1
npm install pm2 -g
  1. 运行 nest
  2. 常规指令
1
2
3
4
5
6
pm2 start /workspace/git/pay-back/packages/server/dist/main.js -i 2 --name=payBack --watch
pm2 start /workspace/git/pay-back/packages/server/dist/main.js --name=payBack --watch
pm2 start /workspace/git/pay-back/packages/push-server/dist/main.js --name=pushServer --watch

# 指定环境变量,要更新环境变量或 PM2 选项,请指定--update-envCLI
NODE_ENV=prod pm2 start /workspace/git/pay-back/packages/push-server/dist/main.js --name=pushServer --watch --update-env
  1. 区分生产的 pm2 指令
1
2
pm2 start /workspace/git/pay-back/packages/server/ecosystem.config.js --env prod --watch
pm2 start /workspace/git/pay-back/packages/push-server/ecosystem.config.js --env prod --watch
  1. 修改 ubuntu
    sudo chmod -R 777 +文件名

  2. docker 权限

1
sudo chmod 666 /var/run/docker.sock
  1. ubuntu 启用 root 账户
    https://blog.csdn.net/thebestleo/article/details/123451471

  2. 安装 firefox

1
npx playwright install firefox
  1. vue3 添加 lodash
1
2
3
4
5
6
7
# 引入包
pnpm install lodash-es @type/lodash-es

# vite.config 添加配置,未配置将导致504问题
optimizeDeps: {
include: ['lodash']
}
  1. echart 使用技巧
1
2
3
4
5
6
7
8
9
# 设置内容区域位置
grid: {
right: 60,
// top: '30%',
x2: 20,
y2: 30,
x: 50,
y: 80,
};
序号 类别 成人 儿童 备注
1 证件与票务 身份证、驾照、学生证/军官证、现金+储蓄卡 户口本或出生证明 登机、酒店、自驾、无信号地区
2 衣物 速干短袖3、轻薄长裤2、冲锋衣/薄羽绒1、运动鞋1、徒步鞋1、亮色长裙/衬衫1 速干短袖3、长裤2、抓绒外套1、羽绒马甲1、运动鞋1、溯溪凉鞋1、备用袜子5 昼夜温差10 ℃左右
3 防晒&防护 SPF50+防晒霜50 ml×2、遮阳帽、墨镜、防沙面巾、驱蚊液 儿童防晒霜30 ml、遮阳帽、儿童墨镜、驱蚊贴 草原紫外线强、风沙大
4 药品&急救 布洛芬、蒙脱石散、创可贴、氯雷他定、晕车药 小儿布洛芬、口服补液盐、益生菌 感冒、肠胃、过敏、长途车
5 电子设备 手机、20000 mAh充电宝×2、相机、无人机、插线板 草原插座稀缺
6 日用&个护 洗漱包、湿巾2包、润肤露、雨衣3件、头灯 儿童保温水壶500 ml、小毛毯 蒙古包旱厕、夜拍星空
7 孩子专属 折叠推车、零食补给、画笔贴纸 车程防无聊、推车省体力

2022-03-08-docker基础
https://zhangyingxuan.github.io/2022-03-18-【部署】docker基础/
作者
blowsysun
许可协议