一、Ubuntu安装Docker
下面是具体的步骤:
1.准备条件:安装前先卸载操作系统默认安装的docker,再安装必要支持。
#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
2.准备安装:设置阿里源,因为访问官方源会超时。
# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg#添加阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null#更新源
sudo apt update
sudo apt-get update
3.安装Docker
#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io
#等待安装完成#查看Docker版本
sudo docker version#查看Docker运行状态
sudo systemctl status docker
当安装好了Docker之后,有两种方式来执行docker 命令
- 在docker命令前加上sudo, 比如:sudo docker ps
- sudo -i 切换至root用户,再执行docker 命令,比如:docker ps
由于国内无法访问到Docker,首先在安装的时候选国内阿里的源,参考上面的第2点。
另外还需要在docker daemon 配置文件中增加国内可用的 docker hub mirror ;
在 /etc/docker/ 这个位置找到daemon.json 文件【没有此文件可以新建】修改为以下内容:
{"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://dockerproxy.com","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/"],"insecure-registries": ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"debug": true,"experimental": false
}
重载和重启dockers服务
sudo systemctl daemon-reload
sudo systemctl restart docker
启动Docker并添加开机自启动
#启动 Docker
sudo systemctl start docker#设置开机启动 Docker
systemctl enable docker#重启 Docker
sudo systemctl restart docker
二、常用docker命令
1. docker pull
拉取镜像到本地,如拉取mysql镜像可以用docker pull mysql:版本号,不写默认是最新。
2. docker images
查看本地镜像
3. docker rmi
删除本地镜像
4. docker ps
列出当前正在运行的 Docker 容器
docker ps -a 列出所有创建的容器,包括停止运行的容器
ps 是 “process status” 的缩写, -a 代表 --all
5. docker rm
删除指定容器,删除前需要停止运行容器,或使用docker rm -f 强制删除
docker rm 容器ID或者容器名 都可以删除容器
6. docker run
用于创建一个新的容器,并在该容器中启动指定的镜像所对应的应用程序或进程。它会先检查本地是否存在指定的镜像,如果不存在,则会从默认的镜像仓库(如 DockerHub)中拉取该镜像,然后基于该镜像创建容器,并为容器分配所需的资源,最后启动容器内的应用程序。如果镜像已经存在,则直接使用本地镜像创建并启动容器。
#直接运行
docker run python:3.9-slim#交互式运行
docker run -it --name testContainer python:3.9-slim /bin/bash
-
-it:表示以交互式模式运行容器
-
–name testContainer:为容器指定一个名称,方便后续操作
-
python:3.9-slim:使用指定的镜像
-
/bin/bash:启动一个bash shell
-
退出容器 exit
docker start 用于启动已经创建但处于停止状态的容器。它不会创建新的容器,也不会检查或拉取镜像,而是直接启动之前已经创建好的处于停止状态的容器,使容器内的应用程序或进程继续运行。docker stop 停止容器运行。
7. docker exec
进行容器内部
docker exec -it testContainer bash
在一个正在运行的名为 testContainer 的容器中执行交互式 bash 命令
-it:表示以交互式模式运行容器
bash:启动一个bash shell
8. docker build
用来执行Dockerfile文件,制作自己的镜像时会用到
docker build -t myapp:3 .
-t 用于给镜像命名,这里将其命名为myapp 并带上标签
最后的 . 代表构建上下文的路径,也就是告诉 Docker,将当前目录及其包含的所有文件和子目录作为构建镜像时可访问的范围
三、构造Python Flask Web应用镜像
1. 创建Flask应用
新建一个项目pythonflaskweb ,创建 app.py 文件
# -*- coding: GBK -*-
# 处理中文乱码from flask import Flask
from datetime import datetime
import pytzapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, Docker!'@app.route('/index')
def hello_index():# 设置时区为北京beijing_tz = pytz.timezone('Asia/Shanghai')# 获取当前UTC时间utc_now = datetime.utcnow().replace(tzinfo=pytz.utc)# 转换为北京时区时间beijing_now = utc_now.astimezone(beijing_tz)TT= beijing_now.strftime('%Y-%m-%d %H:%M:%S')return (f"当前时间是: {TT}")if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
2. 创建Dockerfile
Dockerfile是Docker镜像的构建脚本,用于定义应用的运行环境。以下是一个典型的Flask应用的Dockerfile:
# 使用官方Python基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制当前目录内容到工作目录
COPY . /app# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt# 暴露应用运行的端口
EXPOSE 5000# 运行应用
CMD ["python", "app.py"]
3. 创建requirements.txt
为了管理Python依赖,需要创建一个requirements.txt文件,列出所有必要的库:
Flask==2.2.2
Werkzeug==2.3.7
pytz
4.构建Docker镜像
在项目根目录下运行以下命令构建Docker镜像:
docker build -t flask-app .
-t 选项用于给镜像命名,这里我们将其命名为flask-app
最后的 . 代表构建上下文的路径
5.运行Docker容器
构建完成后,可以使用以下命令运行容器
docker run -p 5000:5000 flask-app
-p 选项用于端口映射,将主机的5000端口映射到容器的5000端口
6.验证应用
在浏览器中访问http://localhost:5000,如果看到“Hello, Docker!”,说明你的Flask应用已经成功运行在Docker容器中。
下图为项目结构:
7.打包镜像和加载镜像
docker save 命令允许你将一个或多个镜像保存到一个tar归档文件中,然后可以将其复制到另一台机器。
docker load 命令允许你从tar归档中加载镜像到另一台机器上。
#使用 docker images 命令来列出机器上的所有图像
docker images #使用 docker save 命令将镜像保存到一个tar文件中
docker save IMAGE ID > MyImage.tar #使用 docker load 命令将镜像加载到机器
docker load < MyImage.tar