数媒部docker学习

数媒部docker学习相关

__Containerized-Deployment__

没有服务器,也可以使用Windows版docker

考虑到有大部分同学没有服务器, 所以下面的大部分演示会用到windows版docker, 想一起操作的同学, 可以提前安装

必要准备:

①!!==良好的网络==!! ②在本地或者服务器==安装好docker==, 记得换源, 可以参考下面的教程. 上课的时候==只会==演示windows的docker安装, ==不会演示服务器怎么安装== ③在vscode中安装好==remote-container==, remote-wsl,remote-ssh (后面2个可选)

</br>

`

ssh

安装openssh$~~~~~~~~~~~~~~~$一般都有,可以跳过

配置remote-ssh

</br>

docker安装

服务器

1
2
3
4
    $ sudo sh get-docker.sh --mirror Aliyun
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
    $ docker run hello-world 

可能还要 配置一下 docker组 来免sudo

windows

1
2
3
4
5
6
7
8
     安装wsl2
     前往官网下载 [https://www.docker.com/products/docker-desktop/]
     配置一下 加速镜像:
     在 settings > Docker Engine > 加入 "registry-mirrors":[镜像地址]
     然后在本地cmd或者powershell中就可以用docker命令了
     如果要在本地使用wsl 代替 服务器要确保:
     1. 在docker-desktop中勾选 settings > General > Use the WSL2 based engine (默认是勾选了的)
     2. 在wsl 中执行 sudo apt install docket.io 

</br>

docker镜像配置 (服务器)

如果在服务器上用apt或者yum等方法安装的一般都会自动给你换源

1
2
3
4
5
6
7
    $ vim /etc/docker/daemon.json    //目录可能不同, 但是一定是 daemon.json 文件
    {
        "registry-mirrors": [//在这里添加加速镜像
            "https://registry.docker-cn.com" ,
            "https://docker.mirrors.ustc.edu.cn"
        ]
    }
镜像加速器 镜像加速器地址
Docker中国官方镜像 https://registry.docker-cn.com
DaoCloud镜像站 http://f1361db2.m.daocloud.io
Azure中国镜像 https://dockerhub.azk8s.cn
科大镜像站 https://docker.mirrors.ustc.edu.cn
阿里云 https://.mirror.aliyuncs.com
七牛云 https://reg-mirror.qiniu.com
网易云 https://hub-mirror.c.163.com
腾讯云 https://mirror.ccs.tencentyun.com

</br>

docker命令

参考网站一$~~~$参考网站二$~~~~~~~~$想系统学习,就看这两个网站

镜像 操作

BTW:官方镜像网站
1
2
3
4
$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]      
eg: docker pull mysql:8.0                     //拉取镜像
$ docker images                               //查看镜像
$ docker rmi [选项] <镜像1> [<镜像2> ...]       //删除镜像

docker run

1
2
3
4
交互式进程 $ docker run -it --e <环境变量> -p <主机port>:<容器port> --name <容器名字> <镜像>[:版本号]

守护式进程 $ docker run -d --e <环境变量> -p <主机port>:<容器port> --name <容器名字> <镜像>[:版本号]
eg: docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 --name mysqlts mysql:8.0

目录挂载

1
2
3
4
$ docker run -d -p 8080:8080 --name myFirstContainer -v ~/test1:/app myFirstImg:v1
$ docker volume ls // 查看 卷
$ docker volume inspect vagrant_mysql //查看具体卷的位置

注意挂载目录一定是绝对路径, 如果用相对路径就会存到/var/lib/docker/volumes/目录下

</br>

容器 操作

1
2
3
4
5
6
7
$ docker ps -a                                   //查看使用容器
$ docker stop [options] <容器名>/<容器ID>          //停止正在运行的容器
$ docker restart [options] <容器名>/<容器ID>       //重启容器
$ docker rm [options] <容器名>/<容器ID>            //删除容器

$ docker exec -it <容器ID> /bin/bash 
//不要使用 docker attach; 退出的时候容器会停止

</br>

快速搭建MySQL

1
2
3
4
5
$ apt install mysql-client-8.0      //装client不用配置什么东西

$ docker pull mysql:8.0   
$ docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0    

</br></br>

创建自己的镜像

Dockerfile编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    FROM <基础镜像>

    WORKDIR <工作目录>

    COPY <源文件目录> <目标目录>
    COPY ["文件1", "文件2", ..., "目标目录"]
    ADD <URL> <目标目录>

    ENV <key0> <value0>
    ENV <key1>=<value1> <key2>=<value2>...

    RUN <linux 命令1> && <linux 命令2> && ...

    EXPOSE <端口号>

    CMD ["命令","参数"]

[示例]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    FROM golang:alpine3.15

    WORKDIR /app

    COPY . .
    
    ENV GOPROXY=https://goproxy.cn,direct
    
    RUN go mod tidy && go build main.go

    EXPOSE 9001

    CMD ["./main"]

docker build命令
1
2
3
$ docker build [OPTIONS] PATH
eg: docker build -f Dockerfile -t myFirstImg:v1 . 
//这里的" . "是当前目录; -t 指定 名字:tag   -f 指定Dockerfile 默认是当前目录下的Dockerfile

</br>

==[翻车部分更改]==

打包镜像

1
2
3
4
5
6
7
8
9
10
11
12
容器打包成镜像
$ docekr commit -p [容器名]/[容器ID] [镜像名]:[tag]
$ docker commit -p mbtsy mockingbird:v1

镜像 转 可传输文件 
$ docker save [options] [path/文件名.tar] [镜像名]:[tag]
$ docker save -o mockingbird.tar mockingbird:v1

传输到目标机器后; tar文件 转 镜像
$docker load [OPTIONS]
$ docker load -i mockingbird.tar

==[翻车部分更改]==

</br>

docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: "3"

networks:
  basic:

services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"
    networks:
      - basic

[示例]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: '2'

networks:
  world_net:

services:

  golang_demo:
    container_name: world
    image: go-web
    ports:
      - "8099:80"
    volumes:
      - ./app/go/world:/go/src/app
    networks:
      - world_net
  db:
    container_name: mysql_for_world
    image: mysql:8.0
      volumes:
        - db_data:/var/lib/mysql
    environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
    networks:
      - world_net

</br>

快速搭建编译环境

参考视频

前提是下好了vscode的remote-container

</br>

  • 打开 远程资源管理器
  • 选择 ssh targets ; 链接服务器
  • 进入服务器后,打开一个项目
  • ctrl+shift+p : 调出用于执行命令的输入框 ; 键入 Remote-Containers
  • 选择 Remote-Containers : Add Deployment Container Configratin files
  • 然后选择一个自己需要的 编译环境版本 ; features的话看自己需求,后面装也行
  • 然后会多出一个 .devcontainer 文件夹 , 里面有2个文件 : Dockerfiledevcontainer.json
  • Dockerfile ==这里最好只提供基础镜像, 也可以与devcontainer.json混用==
  • devcontainer.json 参考文档


实际项目展示 MockingBird

杨gg授课录播