在容器运行的过程中,无论进行了什么操作,一旦容器退出或者重启,里面的数据都会被清空,这就是容器的生命周期。
目录结构
tke-lesson3
├── Dockerfile
├── sources.list
sources.list
文件内容
deb http://mirrors.cloud.tencent.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.cloud.tencent.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.cloud.tencent.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.cloud.tencent.com/ubuntu/ focal-updates main restricted universe multiverse
Dockerfile
文件内容
#获取版本号为latest的ubuntu镜像
FROM ubuntu:latest
#修改apt的镜像源地址
COPY ./sources.list /etc/apt/
#更新本地缓存包
RUN apt-get update && apt-get install -y python3
VSCode中右键选择“在集成终端中打开”,输入下面命令,打包成镜像
docker build -t tke-lesson3 .
新建一个命令行窗口,启动名称为tke-lesson3
的容器,进入交互模式。
docker run -it --rm --name tke-lesson3 tke-lesson3
然后输入python3
,即可进入python的交互模式。
通过docker images命令,可以看到刚刚打包的镜像大小高达169MB,这是因为Ubuntu系统内置了很多软件,导致整体的包变得很大。
实际开发中,可能用不到这么多软件和工具,只需要选择安装必须的软件即可。因此后面的系统镜像选择更轻量的Alpine Linux更加合适。
由于alpine过于精简,导致运行编程语言项目需要安装很多依赖。不过还在官方提供了各种编程语言版本的系统。
官方镜像使用的操作系统可能不尽相同,比如Linux操作系统发行版alpine、bullseye、stretch、buster,windows系统;芯片架构是amd64, arm32v6, arm32v7, arm64v8, ppc64le, s390x等;开发环境版本不同(如Nodejs 17.1.0);以及瘦身版(slim)有多个tag可以选择。
直接使用命令docker pull node,这样拉去的是lastest标签下的镜像,而lastest只是版本号名称,不一定是最新的,所以最好是使用固定的tag。
docker pull python:3.11.0a4-bullseye
docker run -it --rm --name tke-python python:3.11.0a4-bullseye #后面要写版本号,不然会下载lastest
Dockerfile文件:
FROM python:3.10.0-bullseye
当前目录下终端输入:
docker build -t tke-python .
目录结构
python-start
├── Dockerfile
└── index.py
index.py
name = input("请输入您的姓名:")
company = input("请输入您的公司名:")
title = input("请输入您的职位:")
email = input("请输入您的邮箱:")
info = f"""
您输入的结果如下:
尊敬的{name},您好,您就职于{company}公司的{title},
我们将会通过您的邮件{email}和您保持联系。
"""
print(info)
Dockerfile
#拉去python3开发环境
FROM python:3.10.0-bullseye
#设置工作目录
WORKDIR /usr/src/app
#复制本地目录文件到工作目录
COPY . .
#执行命令
CMD [ "python", "./index.py" ]
打包镜像
docker build -t python-start:1.0.1 .
进入交互模式
docker run -it --rm --name python-start python-start:1.0.1
目录结构
express-start
├── Dockerfile
└── package.json
└── index.js
└── .dockerignore
package.json
{
"name": "TKE express基础案例",
"description": "使用Docker来部署后端应用",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
index.js
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('你好啊,你打开的是网站的首页')
})
app.listen(port, () => {
console.log(`你现在打开的端口是: http://localhost:${port}`)
})
Dockerfile
FROM node:17-slim
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install --only=production
COPY . ./
CMD [ "npm", "start"]
当前目录下终端
docker build -t node-start:1.0.1 .
docker run -dp 3005:3000 --name node-start node-start:1.0.1
访问localhost:3005
,就可以看到网页了。
今天章节的实操项目比较多,体验了docker中使用python和nodejs两种语言部署项目的过程。每次创建容器镜像的时候,速度会比较慢,所以需要添加sources.list
来加速。用Docker来跑编程语言项目,比起传统的服务器环境更加轻量,而且不同docker容器互相隔离,互不影响,实际开发用起来很方便。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。