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是一个非常实用的工具,运用起来,可极大提高工作效率!
如有不对之处,请多多指正!