数媒部docker学习
数媒部docker学习相关
__Containerized-Deployment__
没有服务器,也可以使用Windows版docker
考虑到有大部分同学没有服务器, 所以下面的大部分演示会用到windows版docker, 想一起操作的同学, 可以提前安装
必要准备:
①!!==良好的网络==!! ②在本地或者服务器==安装好docker==, 记得换源, 可以参考下面的教程. 上课的时候==只会==演示windows的docker安装, ==不会演示服务器怎么安装== ③在vscode中安装好==remote-container==, remote-wsl,remote-ssh (后面2个可选)
</br>


ssh
安装openssh$~~~~~~~~~~~~~~~$一般都有,可以跳过
</br>
docker安装
服务器
$ sudo sh get-docker.sh --mirror Aliyun $ sudo systemctl enable docker $ sudo systemctl start docker $ docker run hello-world
可能还要 配置一下 docker组 来免sudo
windows
安装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等方法安装的一般都会自动给你换源
$ 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:官方镜像网站
$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
eg: docker pull mysql:8.0 //拉取镜像
$ docker images //查看镜像
$ docker rmi [选项] <镜像1> [<镜像2> ...] //删除镜像
docker run
交互式进程 $ 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
目录挂载
$ 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>
容器 操作
$ 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
$ 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编写
FROM <基础镜像>
WORKDIR <工作目录>
COPY <源文件目录> <目标目录>
COPY ["文件1", "文件2", ..., "目标目录"]
ADD <URL> <目标目录>
ENV <key0> <value0>
ENV <key1>=<value1> <key2>=<value2>...
RUN <linux 命令1> && <linux 命令2> && ...
EXPOSE <端口号>
CMD ["命令","参数"]
[示例]:
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命令
$ docker build [OPTIONS] PATH
eg: docker build -f Dockerfile -t myFirstImg:v1 .
//这里的" . "是当前目录; -t 指定 名字:tag -f 指定Dockerfile 默认是当前目录下的Dockerfile
</br>
==[翻车部分更改]==
打包镜像
容器打包成镜像
$ 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
version: "3"
networks:
basic:
services:
webapp:
image: examples/web
ports:
- "80:80"
volumes:
- "/data"
networks:
- basic
[示例]:
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个文件 : Dockerfile和devcontainer.json
- Dockerfile ==这里最好只提供基础镜像, 也可以与devcontainer.json混用==
- devcontainer.json 参考文档