docker

414 阅读3分钟

一、前置知识

《菜鸟教程》

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

参考资料

欢迎关注我的前端自检清单,我和你一起成长