前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第三章 Docker与编程语言

第三章 Docker与编程语言

原创
作者头像
喵喵侠
发布2022-01-23 05:25:00
8440
发布2022-01-23 05:25:00
举报
文章被收录于专栏:喵喵学前端喵喵学前端

Docker生命周期与Dockerfile

Docker生命周期

在容器运行的过程中,无论进行了什么操作,一旦容器退出或者重启,里面的数据都会被清空,这就是容器的生命周期。

Dockerfile与命令行

目录结构

代码语言:javascript
复制
tke-lesson3
├── Dockerfile
├── sources.list 

sources.list文件内容

代码语言:javascript
复制
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 文件内容

代码语言:javascript
复制
#获取版本号为latest的ubuntu镜像
FROM ubuntu:latest
​
#修改apt的镜像源地址
COPY ./sources.list /etc/apt/
​
#更新本地缓存包
RUN apt-get update && apt-get install -y python3 

VSCode中右键选择“在集成终端中打开”,输入下面命令,打包成镜像

代码语言:javascript
复制
docker build -t tke-lesson3 .

新建一个命令行窗口,启动名称为tke-lesson3的容器,进入交互模式。

代码语言:javascript
复制
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。

官方镜像的使用

代码语言:javascript
复制
docker pull python:3.11.0a4-bullseye
docker run -it --rm --name tke-python python:3.11.0a4-bullseye #后面要写版本号,不然会下载lastest
手动构建python3.10镜像

Dockerfile文件:

代码语言:javascript
复制
FROM python:3.10.0-bullseye

当前目录下终端输入:

代码语言:javascript
复制
docker build -t tke-python .

使用Docker学习编程语言

Python项目

目录结构

代码语言:javascript
复制
python-start
├── Dockerfile
└── index.py

index.py

代码语言:javascript
复制
name = input("请输入您的姓名:")
company = input("请输入您的公司名:")
title = input("请输入您的职位:")
email = input("请输入您的邮箱:")
info = f"""
您输入的结果如下:
尊敬的{name},您好,您就职于{company}公司的{title},
我们将会通过您的邮件{email}和您保持联系。
"""
print(info)

Dockerfile

代码语言:javascript
复制
#拉去python3开发环境
FROM python:3.10.0-bullseye
#设置工作目录
WORKDIR /usr/src/app
#复制本地目录文件到工作目录
COPY . .
#执行命令
CMD [ "python", "./index.py" ]

打包镜像

代码语言:javascript
复制
docker build -t python-start:1.0.1 .  

进入交互模式

代码语言:javascript
复制
docker run -it --rm  --name python-start python-start:1.0.1

包管理器与Docker

目录结构

代码语言:javascript
复制
express-start
├── Dockerfile
└── package.json
└── index.js
└── .dockerignore

package.json

代码语言:javascript
复制
{
  "name": "TKE express基础案例",
  "description": "使用Docker来部署后端应用",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

index.js

代码语言:javascript
复制
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

代码语言:javascript
复制
FROM node:17-slim
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install --only=production
COPY . ./
CMD [ "npm", "start"]

当前目录下终端

代码语言:javascript
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker生命周期与Dockerfile
    • Docker生命周期
      • Dockerfile与命令行
      • 编程环境的镜像选择
        • 容器与编程环境
          • 官方编程语言镜像
            • 官方镜像的使用
              • 手动构建python3.10镜像
          • 使用Docker学习编程语言
            • Python项目
            • 包管理器与Docker
            • 总结
            相关产品与服务
            容器镜像服务
            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档