Docker

layout: post read_time: true show_date: true title: ‘docker’ date: 2021-07-19 img: posts/20210705/4.jpg tags: [cli] category: opinion author: 随步 description: ‘github action’ —

docker的基础使用

docker install nginx // 下载镜像
docker run -p 81:80 -d --name suibu-nginx-test
// 启动 nginx镜像的容器: 本机81端口映射到容器的80端口;-d后台允许,不要在控制显示,不阻塞控制台的输入;--name 容器名称

docker ps
docker inspect container-ID //容器的信息
docker logs container-ID //容器内运行的日志
docker exec -it container-ID /bin/sh // 进入容器控制台(进入虚拟机)
 ➜  ~ docker exec -it 85 /bin/sh
# pwd
/
# cd /usr/share/nginx/html
# ls
50x.html  index.html
// 我们看见的lcoalhost:81映射到容器80端口看见的nginx的页面就是这个index.html


// docker 可以将容器作为中转站,让用户只使用容器内的镜像作为服务,运行的文件可以是本地的文件,而不是虚拟机里的文件
 ➜  ~ docker run -p 81:80 -d -v /Users/liuyan/FE/:/usr/share/nginx/html --na
me suibu-nginx-test-volumn nginx


dockerFile 的基础语法

创建DockerFile,可以自己去构建镜像后去运行容器

FROM node:14 // 基于某一个镜像开始创建
WORKDIR /app // 设置工作目录
COPY . /app // 将当前文件夹下所有的文件拷贝到工作目录

// 有dockerignore文件,可以在这个copy的过程中,忽略掉写入的文件

# 构建镜像时,安装必备的软件,可以有多个run
RUN xxx

#启动容器时候,只能有一个CMD
CMD xxx

# 考虑脚本是在RUN里写还是CMD写的时候,想一下:构建只有一次,启动容器有多次

# 环境变量
ENV K1=v

EXAMPLE

FROM node:14 // 基于某一个镜像开始创建
WORKDIR /app // 设置工作目录
COPY . /app // 将当前文件夹下所有的文件拷贝到工作目录

# 设置统一的时区
RUN ln -fs /usr/share/zoneinfo/Asia/ShangHai /etc/localtime && echo 'Asia/ShangHai' > /etc/timezone

RUN npm set registry 国内npm镜像
RUN npm i

#启动
CMD echo $SERVER_NAME && npm run dev && npx pm2 log
#占据控制台阻塞的,一直占据控制台

#环境变量
ENV SERVER_NAME=""
#在js代码中也可以使用 process.env.SERVER_NAME

dockerFile 构建镜像

依据dockerFile去构建出一个镜像

docker build -t <name> .
# 最后 . 指Dockerfile在当前文件夹下; <name> 镜像的名称
docker images
➜  docker-study docker build -t suibu-test-image .
➜  ✗ docker run -p 9090:3000 -d --name suibu-server suibu-test-image
docker ps
docker logs containerID
docker rm containerID
docker rmi imageID

docker compose

多个容器组合,软件设计和开发,有单一职责原则,每个容器只负责一个服务。如果开发环境需要多个服务,就需要启动多个docker容器,连通多个docker容器,就需要docker compose

SuiBu

SuiBu

Engineer

Comments

  Write a comment ...