docker desktop动手实践,构建镜像,启动容器
我一直对于docker处于一个仅仅了解表面概念的状态,对于说它像个“沙盒”,避免出现“在我电脑上能运行怎么到你那就不行了”的情况,知道它很好用,但是也没实际用过,今天就让自己动动手,自己试着在pycharm里编写简单的dockerfile构建镜像(image)和容器(container)吧,慢慢了解。
我一直对于docker处于一个仅仅了解表面概念的状态,对于说它像个“沙盒”,避免出现“在我电脑上能运行怎么到你那就不行了”的情况,知道它很好用,但是也没实际用过,今天就让自己动动手,自己试着在pycharm里编写简单的dockerfile构建镜像(image)和容器(container)吧,慢慢了解。
一、安装Docker desktop
可以借鉴别的博主安装教程,并不难,然后我是用自己的谷歌账号登录的。
二、基础使用
登录后界面像是这样:

1这里表示Docker Desktop 已经跑起来了,2是可以直接练习一些命令的终端。
1. docker --version
2. # 第一步:拉取 nginx 镜像(会从网上下载,稍等一会)
docker pull nginx
# 第二步:运行它(--name和后面的my_docker是用来给容器起名字的,也可以不写,会自动分配名字)
docker run -d -p 8081:80 --name my_docker nginx
# 第三步:看容器是否在跑
docker ps
3. docker rename 旧名字 新名字 #修改容器名字
跑完之后,打开浏览器访问 http://localhost:8081,如果看到 Nginx 的欢迎页面,你的第一个容器就成功了!

还有一些别的命令:
docker ps可以查看当前正在运行的容器

在界面侧边栏的containers和images里可以看到自己的所有容器镜像情况。


注意:
1)
在images里每点击一次后面那个运行键,就会在containers里创建一个容器,点一次创建一个,同一个镜像可以启动任意多个容器,通过这种方式不小心创建的容器有个特点-----port(s)这一列为空,你想删就删掉,不想删的就留着。
也可以用别的方法避免这种情况:
1.启动容器时指定容器名字,类似于:
docker run --name my-docker nginx
2. docker start my-docker # 启动已有容器
docker stop my-docker # 停止
docker run 是新建并启动,docker start 是启动已有的
2)
因为创建容器时要指定端口号,我就遇到了问题,如果你不慎将某几个容器的端口号都设置成80,那只能启动其中一个,而且容器一旦创建完成端口是不能更改的,只能删除重建,所以注意一下。

OK,然后可以在pycharm里自己写dockerfile并将其容器化,其实不止可以在pycharm里写,只是我习惯在pycharm里写而已。
新建一个项目dockerapp,总共就俩文件就行,app.py和Dockerfile文件

app.py:
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return 'Hello, Docker!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
port=5000:Flask 在容器内部的 5000 端口监听请求,所以docker run时要写-p 8080:5000host='0.0.0.0':这个非常重要,意思是接受来自任何地方的请求。如果写127.0.0.1只接受容器自己内部的请求,外面根本访问不到,这是新手容器跑起来但浏览器访问不了的最常见原因之一- 当有人访问
/(根路径,就是localhost:8080)时,执行hello()函数,返回Hello, Docker!这段文字给浏览器
Dockerfile:
#指定基础镜像。就像说"我要在一台已经装好 Python 3.12 的电脑上开始操作"。slim 是精简版,体积更小,够用就行
FROM python:3.12-slim
#在容器内部创建 /app 目录并进入,后续所有操作都在这里进行,相当于 mkdir /app && cd /app
WORKDIR /app
#把你本机当前目录(.)的所有文件复制到容器内的当前目录(也是 .,即 /app)
COPY . .
#告诉容器**启动时**执行什么命令,这里就是 `python app.py`,也就是启动 Flask 服务器。`CMD` 和 `RUN` 的区别是:`RUN` 是做菜的过程,`CMD` 是菜做好后怎么上桌。
CMD ["python", "app.py"]
然后就可以去终端执行构建:
1. docker build -t dockerapp .
2. docker run -d -p 8080:5000 --name python_docker
在这里我出现了问题:

原因是网络问题,Docker 无法连接到 docker.io 去下载 python 镜像,是因为国内访问 Docker Hub 被限制了,解决方法就是打开 Docker Desktop → 右上角齿轮(Settings)→ Docker Engine,添加字段:(注意要和已有的 JSON 内容合并,不要破坏原有结构)
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://mirror.baidubce.com"
]
}
点 "Apply & Restart",等 Docker 重启再去pycharm运行刚才那个命令。打开浏览器访问 localhost:8080,能看到Hello,Docker!就成功了。
这时候回到Docker desktop里能看到创建的这个容器和镜像。


三、后续
假如后期python文件有所变动,比如你又写了一些文件、删除了一些文件等等,都要重新docker build一次,比较麻烦,可以通过挂载的方式简化,不过我还没实践过,命令如下:
docker run -d -p 8080:5000 -v D:\PycharmProjects\dockerapp:/app --name python_docker dockerapp
这个 -v 本机路径:容器路径 就是挂载,本机的文件夹和容器的 /app 实时同步,改完代码不用 rebuild,重启容器就生效。
更多推荐


所有评论(0)