一、前置知识
1,Docker 包括三个基本概念:
- 镜像(Image) :Docker 镜像(Image)
- 容器(Container) :容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository) :仓库可看成一个代码控制中心,用来保存镜像。(hub.docker.com/)
2,简单demo
$ docker run ubuntu:15.10 /bin/echo "Hello world"
- ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo "Hello world": 在启动的容器里执行的命令
3,仓库常用命令
$ docker login
$ docker search ubuntu
$ docker pull ubuntu
4,镜像常用命令
$ docker ps -a
$ docker image ls
$ docker rmi <image>
5,容器常用命令
$ docker pull <image>
$ docker run --name nginx-test -p 8080:80 -d -v /home/user1/nginx:/usr/share/nginx/html <image>
$ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 <image>
$ docker restart <容器 ID>
$ docker rm <容器 ID>
$ docker logs <容器 ID> -f —tail=30
$ docker inspect <容器 ID>
- --name nginx-test:容器名称。
- -p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行。
- -v xx:xx: 挂载宿主主机,前面的目录是宿主机目录,后面的目录是容器内目录
6,Dockerfile
构建镜像
在 Dockerfile 文件的存放目录下,执行构建动作
(镜像名称:镜像标签),会将路径下 . (本次执行的上下文路径)的所有内容打包。
$ docker build -t nginx:v3 .
指令详解
COPY hom* /mydir/
CMD <shell 命令>
ENTRYPOINT ["/a.shell"]
WORKDIR <工作目录路径> #只有通过 WORKDIR 创建的目录才会一直存在
ENTRYPOINT ["nginx", "-c"] # 定参
docker run nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令
nginx -c /etc/nginx/new.conf
二、实践
首先 linux安装docker
1,nginx 部署web服务
- 1,拉nginx镜像 docker pull nginx
- 2,配置nginx配置
vi /home/user1/conf/nginx.conf
- 3,更新代码
scp ./dist.zip user1@ip:/home/user1/myweb
- 4,构建nginx容器 name为nginx-test,访问端口8080
docker run --name nginx-test
-p 8080:80 -d
-v /home/user1/conf/nginx.conf:/etc/nginx/nginx.conf
-v /home/user1/myweb:/usr/share/nginx/html
<image>
- 5,重启
docker restart 容器id
2,node部署nest服务
- 1,拉node镜像
docker pull node
创建目录
mkdir /home/user1/node
- 2, 上传代码
本地: 运行npm run build打包,生成dist文件压缩上传
scp ./dist.zip user1@ip:/home/user1/node
scp ./package.json user1@ip:/home/user1/node
服务器上:
cd /home/user1/node
unizp dist.zip
- 2,配置Dockerfile
FROM node
WORKDIR /home/user1/node
EXPOSE 3000
COPY ./dist /home/user1/node/dist
COPY ./package.json /home/user1/node
RUN npm install
CMD ["node","/dist/main.js"]
- 3, 生成镜像
docker build -t nest_code .
- 4, 生成容器
docker run --name nest-code -d -p 3000:3000 nest_code
- 5, 更新代码
第2步scp上传代码
依赖更新: 删除镜像和容器,重新生成
docker rm node-code
docker rmi node_code
docker build -t nest_code .
docker run --name nest-code -d -p 3000:3000 nest_code
依赖没更新:代码更新,上传代码后
docker update --restart=always nest-code
3,部署minio 文件存储管理
docker run -p 9000:9000 --name minio
-e "MINIO_ACCESS_KEY=admin"
-e "MINIO_SECRET_KEY=admin123456"
-v /home/user1/minio/data:/data
-v /home/user1/minio/config:/root/.minio
minio/minio server /data
4,mysql
docker run -itd --name mysql-test
-p 3306:3306
-e MYSQL_ROOT_PASSWORD=root123456
mysql
参考资料
欢迎关注我的前端自检清单,我和你一起成长