docker部署一个web应用

293 阅读2分钟

docker使开发者更容易!

安装docker

mac下载docker: brew cask install docker 下载完成运行docker

查看docker版本 docker version

设置加速镜像

mac在Dashboard/Docker Engine设置里面设置,也可在/etc/docker/daemon.json中设置

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://hub-mirror.c.163.com"
  ]
}

项目中host配置改成 0.0.0.0

the container to listen on 0.0.0.0 rather than 127.0.0.1 /localhost

新建Dockerfile

项目下新建Dockerfile文件

FROM node:12 //项目依赖环境

# 将当前项目拷贝到镜像中的 /app 文件中
COPY . /app

# 设置 /app 为工作区
WORKDIR /app

VOLUME ["/app"]

CMD [ "startup.sh" ]

startup.sh

#!/bin/sh

set -e

WDir=/app

if [ "$(ls -A ${WDir})" ]; then
    echo "[i] ***** dir /app have files,so start init. *****"
    echo "[i] ***** yarn install *****"
    npm install cnpm -g --registry=https://r.npm.taobao.org
    cnpm install
    
    echo "[i] ***** npm start *****"
    npm run dev
else
    echo "[e] ***** dir /app is empty,so can not run. *****"
    echo "[i] ***** Please copy project files to VOLUME for /app and then restart docker container *****"
    node
fi

构建镜像:docker build -t docker_demo1 .

查看镜像 :docker images

构建完成启动容器:

docker run -d -p <宿主机器端口>:<Dockerfile对外暴露端口> docker_demo1

    -d 后台运行
    -p 指定端口映射

查看所有容器: docker ps -a

查看日志: docker logs 容器ID

进入容器: docker exec -it docker_demo1 sh

运行未运行的镜像docker run -it docker_demo1 sh

如果有安装依赖失败,或环境配置有问题,可以进入容器内调试

启动完成之后可以测试网络是否连通

查看网络是否连通:telnet localhost 8888

查看链接能否访问:curl http://localhost:8888

如无意外,搭建的web应用就可以访问了。

docker-compose

docker-compose,类似编排文件,集中管理docker

docker-compose.yml

version: '3
services:
 web:
   image:  demo:latest
   # 容器的自定义名字,也就是命令行的--name
   container_name:  demo
   ports:  # 不用: 则只是暴露内部端口,用了就是映射外部访问的接口 , -p
     - "3000:3000"
   networks: # 单个主机上用bridge(桥接)居多,Swarm(集群)上的overlay,
     - bridge
   depends_on: #镜像依赖 redis 启动完后启动web
     - redis
   volumes:  #项目相对地址:镜像地址
       - ./app:/home/work/app
       - ./app/logs:/home/work/app/logs
   restart:  always # 容器重启策略
 redis:
   restart:  always
   image:  redis:latest
   networks:
     - bridge
   container_name:  redis
networks: # 自定义的网络名
 bridge:
 
# 需要一点点的去总结经验
# 具体看官方网站对compose的介绍 :  https://docs.docker.com/compose/compose-file/

完成后即可启动文件。

启动镜像docker-compose up -d -d 可选参数,后台运行

停止运行docker-compose down

docker-compose 可以同一性处理,极大地提高了效率。

本文只是做一个简单运行的例子,docker是一个非常实用的工具,运用起来,可极大提高工作效率!

如有不对之处,请多多指正!