我用的是腾讯云服务器,操作系统是OpenCloudOS 9,基本上可以当特色版CentOS用。
docker安装教程:
- OpenCloudOS 9安装docker:
安装:sudo dnf install docker
启动docker服务:systemctl start docker
文章目录
1. 拉docker镜像,镜像的镜像
由于众所周知docker官方镜像被墙了,所以需要用民间镜像跳转,举例python:3.10镜像:
sudo docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/python:3.10
sudo docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/python:3.10 docker.io/library/python:3.10
我一般用的这个网站提供的镜像,这个网站是从谷歌直接搜到的:https://docker.aityp.com/
修改下载镜像配置文件从而能够一劳永逸设置镜像路径 & 自搭docker镜像的教程可以参考:【2024/12/27域名再次被墙 现已更换】2024自建Docker镜像代理加速 教程来了 3分钟部署完毕 - 资源荟萃 - LINUX DO
但是我每次其实都是直接一个一个镜像下的,哈哈哈。
2. 启动、运行、退出容器
1. 启动交互式容器
启动容器,启动一个交互式容器并进入容器环境:sudo docker run -it --name my_python_env python:3.10 /bin/bash
在交互式容器环境内就跟在正常终端内操作一样了,在有Python环境的容器内就可以运行pip、python等命令了。
2. 退出容器
在使用 docker run -it
命令启动交互式容器后,您可以通过以下方式退出容器:
-
保持容器运行,退出交互会话:
如果希望退出交互会话但让容器继续在后台运行,请按以下键组合:
- 键盘组合:
Ctrl + P
,然后立即按Ctrl + Q
此操作将使您退出容器的交互会话,但容器仍在后台运行。
- 键盘组合:
-
退出并停止容器:
如果希望退出交互会话并停止容器,可以使用以下方法:
-
输入命令: 在容器内输入
exit
命令exit
-
键盘组合: 按
Ctrl + D
这两种方式都会使您退出容器的交互会话,并停止容器的运行。
-
3. 使用Dockerfile
在项目目录下创建一个名为 Dockerfile 的文件,内容如下:
FROM python:3.10
# 设置容器的工作目录
WORKDIR /app
COPY /home/user/myfile.txt /root/
# 安装依赖包
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 设置默认命令
CMD ["python", "your_script.py"]
在Dockerfile所在目录下运行以下命令构建镜像:docker build -t my_python_app:latest .
此命令将创建一个名为 my_python_app:latest
的镜像。
使用构建的镜像运行容器:docker run -it --name my_running_app my_python_app:latest
此命令将启动一个名为 my_running_app
的容器,并运行 your_script.py。
4. 进入已存在的docker服务的交互式容器中:exec
docker exec -it -u 0 my_python_app COMMAND
COMMAND在Python环境里就可以是/bin/bash:sudo docker exec -it my_python_env /bin/bash
参数-u
用于指定执行命令时使用的用户ID(UID)或用户名。这允许你在容器内以特定用户的身份执行命令,而不是默认的 root 用户。
使用 -u
参数可以帮助你避免在容器内以 root 用户身份执行命令,从而提高安全性。此外,某些应用程序可能需要以非 root 用户身份运行,因此使用 -u
参数可以确保应用程序正常工作。
5. docker run命令参数
-v
:指定容器目录/app到Linux目录文件的映射,意思是这个参数指定的路径就相当于容器目录/app了,Dockerfile就直接在这里运行,所以your_script.py也要放在这里-p
:Linux宿主机、容器的端口映射,比如1080:5000
就相当于把访问主机的1080端口映射成访问容器的5000端口
如果容器内有多个服务需要映射,可以使用多个-p
参数。--network
:联网,如需要连本机就用host
,用host
就能访问本机的服务了,比如MySQL
但是需要注意的是docker for Windows不支持host,详情请参考:window安装DockerDesktop无法使用host网络模式解决方案_docker注册服务为什么不认host-优快云博客
对于Windows MySQL还需要设置MySQL可以从任何IP地址访问的权限:docker容器中连接宿主机mysql数据库_docker连接宿主机mysql-优快云博客
1. 示例:用docker创建一个服务,挂载代码路径,映射端口
Dockerfile就在代码文件夹里。
如果不需要更新文件的话就用COPY命令:
FROM python:3.10
WORKDIR /app
COPY . /app/
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD ["python", "demo2.py"]
cd 代码文件夹
sudo docker build -t my_python_app:latest
sudo docker run -d -p 5000:5000 my_python_app
如果需要实时更新文件的话用-v
参数挂载,Dockerfile简化为:
FROM python:3.10
WORKDIR /app
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD ["python", "demo2.py"]
cd 代码文件夹
sudo docker build -t my_python_app:latest
sudo docker run -d -p 5000:5000 -v 指定文件夹:/app my-python-app
3. 提交镜像
docker commit my_python_env my_python_image:latest
4. 查看所有docker服务
sudo docker ps
会展示正在运行的服务的如下信息:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
sudo docker ps -a
:会显示所有服务,包括已暂停的
5. 查看容器日志
docker logs 容器ID/容器名
这个容器ID用上一节提到的docker ps
看就行。
可选参数:
-f
:实时日志--tail 函数
:显示最新的多少行
6. 执行容器中的命令行
docker exec -it 容器ID bash命令行
7. 将主机中的文件复制到容器里
docker cp --chmod=u+x 主机文件路径 容器ID:容器文件路径
chmod是在这里给个权重,不能更改文件或目录的所有权或组。
(持续访问文件用docker volume。构建新的镜像时可以在Dockerfile中添加,就用COPY就行,文件会成为镜像的一部分,以后分发和部署就直接自动放进去。此外也可以靠放在docker run -v挂载的目录里)
8. 查看所有镜像
docker images
9. 停止容器
docker stop <容器ID或容器名>