docker部署

"部署"

Posted by zwt on September 30, 2020

安装

通常linux系统自带docker 剩下的就需要自己拉去镜像,我是在阿里云拉取的:

1
2
3
4
5
6
7
8
9
访问:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
点击地下镜像加速,点击centos,上方会有加速地址。
在linux中配置:
cd /etc/docker
新建daemon.json并填入:
{上面的镜像地址}

检测是否加速成功:docker search nginx。出现各种镜像,就表示成功

配置

拉取镜像:

1
2
3
4
docker pull 镜像名称(上面可以搜索看到)
docker images 查看镜像
docker ps -a 查看运行镜像详细信息
docker stop 容器id 停止容器

实施

编写dockerfile:

1
2
3
4
5
6
FROM python:3.6.12  # python环境
ADD . /  # 将代码copy入镜像
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt  # 安装所需包
WORKDIR /  # 部署到服务器上的路径
EXPOSE 5000  # 暴露端口
CMD ["/bin/bash", "start.sh"]  # 运行程序相关shell

打包:

1
sudo docker build -t 'imagesname' .

进入容器

1
docker exec -it 243c32535da7 /bin/bash

运行:

1
2
3
4
5
6
7
8
sudo docker run -d -p 80:80 nginx:latest

sudo docker run -it -d -p 80:80 nginx:latest

-d:表示后台运行容器
-t:为docker分配一个伪终端并绑定到容器的标准输入上
-i:是让容器的标准输入保持打开状态
-p:映射端口

docker logs [options] 容器: 查看容器log options: details 显示更多信息 -f 跟踪实时信息 -t 显示时间戳 –tail=100 只显示100行log –since 30m 显示近30分钟log docker inspect NAMES : 查看容器所有状态信息 docker top NAMES:查看 进程信息 docker port ID/NAMES: 查看端口 docker exec -it ID/NAMES ip addr:查看id地址 systemctl stop docker:停止docker服务

windows下

环境配置

参考资料

  • 进入https://hub.docker.com/查找可用镜像
  • 找到后docker pull ubuntu:16.04进行镜像的拉取
  • docker images 查看已有镜像
  • docker run -it docker:16.04运行已有镜像,生成容器。其中’-it’的中的‘i’表示持续运行该容器;‘t’表示告诉docker为该容器建立一个标准的命令行终端。
  • docker ps -a 查看所有容器
  • docker start -i 2e01fd26138f 启动特定的容器
  • docker commit 2e01fd26138f ubuntu:test 固话特定容器(docker commit [CONTAINER ID] [IMAGE_NAME]:[TAG])
  • 宿主机的文件/文件夹 拷贝到docker容器的指定目录中
    • docker cp [src_path] [target_container]:[container_path]
  • 将容器固化为镜像:docker commit 60a197e8a57f ubuntu:python2_and_3
  • 将镜像打包:docker save -o C:\Users\ChenJH\Desktop\my_docker.tar ubuntu:python2_and_3
  • 从压缩包读取镜像:docker load -i C:\Users\ChenJH\Desktop\my_docker.tar

删除容器

  • docker ps -a查看所有正再运行的容器
  • docker stop id 停止运行
  • docker rm id 删除可以承载该进程的容器
  • docker rmi name 删除容器
  • docker image inspect –format=’ ‘ $(docker image ls -q –filter since=a56f53d71430)查看依赖容器

push容器

  • docker tag zwt335987028:test zwt335987028/test:test
  • docker push zwt335987028/test:test

docker链接pycharm

资料

服务部署

docker image build -t jeffzhangding/chatbot:1.3 .

docker image push jeffzhangding/chatbot:1.3

docker image pull jeffzhangding/chatbot:1.3

一些问题

端口暴露问题

只暴露端口80,不做映射,那么只能通过容器ip+端口访问,只在dockfile中expose端口 暴露端口80,使用-P自动映射,使用docker ps -a查询映射的端口,使用宿主机+映射的端口或者容器id+80端口都可以访问。 暴露端口80,使用-p手动映射端口8080,两个都可以访问 不暴露端口也不映射,容器ip+80可以访问 不暴露端口,使用自动映射-P,容器ip+80可以访问 不暴露端口,使用手动映射-p,都可以访问

总结:

1
2
3
不管是否暴露端口、自动映射或者手动映射,宿主机都可以通过容器ip+80端口访问服务
要通过宿主机ip+端口访问,宿主机必须与容器端口有映射关系
若没有暴露端口,-P自动映射不会映射任何端口,-p可以指定宿主机端口和容器端口形成映射

参考

  1. docker log