docker使用总结
一. 定义
Docker的特点:
- 是一个工具,能快速方便的创建、运行、部署软件。
- 能将一个软件及其依赖打包成一个单独的库,方便移植。
- 能解决不同application之间版本不兼容的问题(比如一个是python2环境,一个是python3环境)
- 相较于虚拟机更为轻量,占用资源少,资源利用率高,运行速度快。
Docker的应用:
- 提供一次性的环境
- 可组建微服务架构,大程序更方便扩容、稳定。
二. docker使用流程
2.1 docker的流程
整个docker的使用流程基本是:编写docker file ==> 创建image(镜像) ==> 实例化为container(容器) ==> 跑container。
2.2 拉取使用的例子
这里用的是doccano这个NLP文本标注工具作为例子,记录下docker在使用该镜像时遇到的问题和总结。
使用过程常用的命令:
- 拉取官方的一个doccano镜像:
docker pull doccano/doccano
- 查看本地镜像列表:
docker image list
- 将镜像实体化为容器:
docker container create --name doccano -e "ADMIN_USERNAME=admin" -e "ADMIN_EMAIL=admin@example.com" -e "ADMIN_PASSWORD=password" -v doccano-db:/data -p 8000:8000 doccano/doccano
- 容器跑起来:
docker container start doccano
- 查看docker的容器(在跑)列表:
docker container ls
- 查看docker的容器(包含在跑/退出)列表:
docker ps -as
- 查看运行日志:
docker logs 上面查询到的容器的id
- 关闭指定的容器:
docker container kill 容器的id
- 删除指定的容器:
docker container rm 容器的id
- 进入到指定的容器中:
docker exec -it 容器的id /bin/bash
三. 创建自己的docker
3.1 创建docker的镜像
下面用简单的python脚本构建镜像(必须包含dockerfile文件和python脚本文件)。下面是整个项目的目录:
├── Dockerfile # Dockerfile文件
└── hello.py # python脚本:功能打印N行helloworld,N是命令行参数
其中Dockerfile文件的内容如下:
FROM python:3.9
COPY ./hello.py /hello.py
ENTRYPOINT ["python3", "hello.py"]
CMD ["3"]
-
如果是正常启动python脚本应该是:
python3 hello.py 3
,这里的3是打印多少行的参数。这里的CMD[“3”] 指的是其后面的参数设定,默认是3。 - 创建docker镜像:
docker build . --tag helloworld
- 跑镜像:
docker run helloworld 10
(这里跑10次hello world) 注意这里如果跑实例的时候,下面删除镜像的时候会冲突,需要删除这里跑起来的实例
3.2 搭建并推送到本地的docker registry
我们可以将自己创建好的docker放到docker仓库中,也就是dockerhub中。当然也可以从dockerhub拉取别人的image。
- 拉取docker官方的私有仓库镜像:
docker pull registry
- 创建一个docker仓库:
docker run -d -p 5050:5000 registry
- 将自己的镜像重新tag标记下镜像:
docker tag helloworld localhost:5050/my-helloworld
- 镜像推送到本地仓库中:
docker push localhost:5050/my-helloworld
- 可以将本地的helloworld和localhost:5050/my-helloworld镜像删除:
docker rmi helloworld localhost:5050/my-helloworld
- 然后再从本地的私有仓库中拉取镜像:
docker pull localhost:5050/my-helloworld
3.3 推送镜像到docker hub
docker hub我们可以理解为一个云仓库,可以和github上类似,用以在远程仓库上存储自己的镜像,方便我们随时拉取。
这里我们需要在dockerhub的官网上进行注册,然后创建属于自己的私有远程仓库。如下所示
之后我们就可以将自己的镜像上传到dockerhub远程仓库中了。
- 在docker的destop上登陆自己的id,这样才能推到远程仓库。
- tag标记下自己本地仓库和远程仓库的映射:
docker tag localhost:5050/my-helloworld siwangtt/test-repo
- 推送到dockerhub远程仓库中:
docker push siwangtt/test-repo
至此,我们就可以在dockerhub上看到我们刚刚上传的镜像咯。