安装
通常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可以指定宿主机端口和容器端口形成映射