服务器设置好了以后,需要部署。部署通个docker有两个方案:
- 把代码全部上传到home文件夹,然后进行build成image,后运行docker-compose。
- 缺点是需要上传,且不能迅速部署,上传很多无用代码
- 优点是docker-compose命令方便
- 代码放在本机,本地docker build单个image,然后push到repo后再远程拉下来,在server运行
- 缺点是需要运行多个命令
- 优点是不用上传
考虑到同时build的image不多,因此第二种方法更科学可行。下面详解:
- 先下载redis,官方redis,不用build image直接run生成container
docker run -p 6379:6379 --name redis-server -d redis
- 测试redis: docker exec -it redis-server sh
- #redis-cli (运行client)如图
注意:
-
一定要用-p 6379:6379表示绑定host和container端口,如图所示 0.0.0.0:6379->6379(如果使用compose则不需要这样,显示也不同)。
-
同时要docker build的时候使用.dockerfile里面的expose命令打开container的端口,如图80/tcp,443/tcp
-
同理,如果要通过外网访问该container也需要绑定,如localhost:3000,则需要run -p 3000:3000,然后才能通过浏览器访问
-
node app里面通过,const client = redis.createClient({ host: "192.168.99.100", port: 6379 }); 访问redis-server,注意:192表示是windows上的docker,如果是linxu和其他则是127,或者不需要填写,则默认。
-
build node app (注意最后点,-t=tage)
docker build -t <username/myapp> .
得到username/myapp的image
- 运行image (注意--name=类似-t)
docker run -p 8360:8360 --name my-app -d <username/myapp>
得到
-
测试,浏览器输入 192.168.99.100:8360 (针对windows docker-toolbox)
-
切换到docker的terminal,输入 docker login
-
docker push <username/myapp>
-
登录服务器
- pull image
-docker login
-docker pull <username/myapp>
-docker images
- 重复搭建redis的步骤(1\4步骤即可)
List all containers (only IDs)
-docker ps -aq
Stop all running containers
-docker stop $(docker ps -aq)
Remove all containers
-docker rm $(docker ps -aq)
Remove all images
-docker rmi $(docker images -q)
docker system prune
docker logs <container>
docker exec -it <container> sh
后记: 如果docker push速度比较慢,也可以通过filezilla把文件(除了node_modules)上传到服务器,然后再服务器上执行:
docker build -t <> .
生成的image直接可以运行
docker run......
注意访问需要是内网IP: 如
查询的话这样看: iptables --table nat --list
设置自动重启
docker run -dit --restart unless-stopped -p 8360:8360 --name kupangzi-server -d frankgo/kupangzi-server
设置多端口
docker run -dit --restart unless-stopped -p 8361:8360 --name kupangzi-server -d frankgo/kupangzi-server