docker教程系列二

河畔的风      2022-02-12     390

关键词:

导航

  • docker概念
  • 手动从镜像运行一个容器
  • 使用dockerfile打包镜像
  • 使用compose部署多容器应用
  • 给docker加上数据持久
  • docker在服务器部署
  • docker持续集成和部署

手动从镜像运行一个容器

手动启动一个容器

手动在本地电脑的docker容器中运行一个web应用

``` sh
    # 下面的命令启动一个docker容器
    docker run -d -t -p 8000:5000 --name demo ubuntu:18.04

    # 这条命令的解释
    -d 的意思是让容器在后台运行
    -t 极少能用到,用于让一个空白的Ubuntu镜像在后台运行
    -p 用于指定端口映射,表示在本机访问8000会被自动转到容器中5000端口
       必须保证本机没有其他应用程序占用了8000端口,否则这里会失败
    --name demo 制定了容器的名字是demo
    ubuntu:18.04 是启动容器时用的镜像名, docker会自动从镜像服务器去下载这个镜像
```

启动容器常见的问题

    # 启动一个端口为3456的进程
    docker run -t -d -p 3456:5000 --name test ubuntu:18.04
    # 报错1,端口被占用,删除test容器来不安比3456端口的占用
    docker rm -f test
    # 报错2,名字已存在, 那么改名字, 也可以用上面的删除容器命令
    docker run -t -d -p 3456:5000 --name test1 ubuntu:18.04

关于容器相关的命令

    # 列出本机正在运行的容器
    docker container ls

    # 列出本机所有容器,包括终止运行的容器
    docker container ls --all

    # 查看正在运行的容器
    docker ps

    # 查看最新指定数量的容器的状态
    docker ps -n 10

    # 终止容器
    docker stop <container id>/<container name>

    # 对终止运行的容器重启, 容器id通过docker ps查询
    docker start <container id>/<container name>

    # 查看容器日志
    docker logs <container id>/<container name

在容器中安装必备软件

启动容器以后,说明了运行了一个镜像实例,比如ubuntu:18.04镜像生成的test容器。这个容器目前有了ubuntu操作系统的文件管理功能,内存管理功能,进程调度等功能。现在还需要拥有python3, pip 环境, apt工具包。

```sh
    docker run -d -t -p 8000:5000 --name unbuntu:18.04
    # 下载apt工具包
    docker exec demo apt update
    docker exec apt -y install python3 python3-pip
    # 安装flask库
    docker exec demo pip3 install flask
```

在容器中运行程序

上面说过,使用docker的目的就是软件应用带环境安装。现在环境好了,需要运行软件应用

```sh
    # demo 容器中创建/code目录
    docker exec demo mkdir /code
    # cp参数把当前文件夹的a.py拷贝到demo容器的/code/a.py
    docker cp a.py demo:/code/a.py
    # 运行demo容器中的a.py
    docker exec demo python3 /code/a.py
```

用脚本的方式配置容器,然后运行脚本配置并开启新容器

之前的一系列命令有些繁琐, 其实更好的方式是在宿主机写脚本,然后cp到docker容器中直接运行.
具体操作看实例操作

实例操作

  1. 在当前目录下创建a.py文件

     from flask import Flask
    
     app = Flask(__name__)
    
     @app.route('/')
     def index():
         return 'Hello from Docker'
    
     # 默认端口5000
     if __name__ == "__main__":
         app.run(host="0.0.0.0", debug=True)
  2. 在当前目录下创建install.sh文件

     # install.sh
     apt update
     apt -y install python3 python3-pip
     pip3 install flask
  3. 在当前目录下创建run.sh文件

     # run.sh
     cd /code
     python3 a.py
  4. 打开终端,输入以下命令

     docker run -d -t -p 8000:5000 --name unbuntu:18.04
     # demo 容器中创建/code目录
     docker exec demo mkdir /code
     docker cp install.sh "demo:/code/install.sh"
     docker cp run.sh "demo:/code/run.sh"
     docker cp a.py "demo:/code/a.py"
     docker exec demo bash /code/install.sh
     docker exec demo bash /code/run.sh
  5. 打开浏览器输入:localhost:8000/

docker系列教程

一、CentOS安装教程(https://shimo.im/docs/YHdpx1MbG8EJj04M/)二、Docker环境初始化(https://shimo.im/docs/4jHdhoQQe0k8uhtd/)三、Docker之利用Nginx部署HTML站点(https://shimo.im/docs/lwWzf3OXx8k4aqMS/)四、Docker之Smile娱乐版CoolQ安装教程(h 查看详情

docker入门教程命令

 Docker入门教程(二)命令【编者的话】DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能。在Docker系列教程的第一篇文章中,我们了解了Docker的基础知识,... 查看详情

微服务系列教程

...SpringBoot入门IDEA版本、SpringBoot实战与原理分析视频课程、docker构建微服务、docker入门、docker进阶、docker解析及轻量级PAAS平台演练等视频 查看详情

flux7docker系列教程:docker简介

本系列教程翻译自Flux7DockerTutorialSeries,系列共有九篇,本文译自第一篇Part1:AnIntroduction。 该系列所有文章将参考其他学习资料翻译,也会加入自己的学习作为部分注解。如有错误,欢迎指正。650)this.width=650;"src="https://segmentfa... 查看详情

docker深入浅出系列教程——docker简介

...义相析。本节属于入门简介,从三个小方面进行简单介绍Docker。Docker介绍:docker是一种内核级别的,新型的虚拟化技术,是运维人员的福音,相对传统虚拟化有本质的差别。docker介绍官网www.docker.comgithubhttps://github.com 查看详情

docker系列之学习笔记教程汇总

Docker是一个开源的应用容器引擎;是一个轻量级容器技术;Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;运行中的这个镜像称为... 查看详情

docker教程系列三:docker容器操作

1查看容器l 查看正在运行容器:dockerpsl 查看所有的容器(启动过的历史容器):dockerps–al 查看最后一次运行的容器:dockerps–ll 查看停止的容器dockerps-fstatus=exited2创建与启动容器l 创建容器常用的参数说明:l... 查看详情

docker教程系列八:docker备份与迁移(完)

...容器保存为镜像我们可以通过以下命令将容器保存为镜像dockercommitnginxmynginxnginx是容器名称mynginx是新的镜像名称此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器2镜像备份docker save-omynginx.tarmyngin... 查看详情

docker系列教程之四dockerfile入门(代码片段)

在上一篇的文章中,我们把 Docker 容器的工作流程剖析的十分清楚了,我们大体可以知道 Docker 组件协作运行容器可以分为以下几个过程:Docker 客户端执行 dockerrun 命令Dockerdaemon 发现本地没有我们需... 查看详情

springcloudalibaba微服务实战教程系列

一、应用系列     Docker安装MySql完整教程、实操 使用到的mysql数据库的安装方案。     Docker安装AlibabaNacos教程  docker安装单实例或集群的Nacos的注册中心方便快速开始。    实现Nacos服... 查看详情

crl快速开发框架系列教程二(基于lambda表达式查询)

本系列目录CRL快速开发框架系列教程一(CodeFirst数据表不需再关心)CRL快速开发框架系列教程二(基于Lambda表达式查询)CRL快速开发框架系列教程三(更新数据)CRL快速开发框架系列教程四(删除数据)CRL快速开发框架系列教程五(使用缓存... 查看详情

docker深入浅出系列|5分钟搭建你的私有镜像仓库(代码片段)

Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方教程,因... 查看详情

docker深入浅出系列|容器数据持久化(代码片段)

Docker深入浅出系列|容器数据持久化Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,... 查看详情

docker深入浅出系列|容器初体验(代码片段)

原文:Docker深入浅出系列|容器初体验目录Docker深入浅出系列|容器初体验教程目标预备工作容器与虚拟化技术什么是Docker为什么要用Docker事例什么是容器镜像和容器容器与虚拟机的区别Vagrant与Docker的区别Docker引擎和架构Docker的镜... 查看详情

react系列教程

React系列教程:学习原地址React系列(一)-邂逅React开发React系列二-核心JSX语法一React系列二-核心JSX语法二React系列三-阶段案例练习React系列四-React脚手架React系列五-组件化开发React系列六-父子组件通信React系列七-非父子组件通... 查看详情

docker从入门到实践系列二-docker安装(代码片段)

...及内核(可选)卸载老版本安装依赖包设置阿里云镜像安装docker启动docker将docker服务设为开机启动停止docker检验安装是否成功查看centos版本Docker要求CentOS系统的内核版本高于3.10。通过命令:uname-r查看当前centos版本,如版本... 查看详情

docker命令实用指南(代码片段)

系列文章目录Docker简介Docker教程–镜像文章目录系列文章目录Docker命令镜像创建镜像方式一:下载方式二:从已经创建的容器中更新镜像,并且提交这个镜像方式三:使用Dockerfile指令来创建一个新的镜像发布镜像... 查看详情

docker深入浅出系列教程——容器管理附加视频

...的头条号,我们一起奇闻共赏,疑义相析。接下来来讲解Docker三大组件之一的容器,如果说镜像是静态的只读文件,那么容器就是带有运行时需要的可写文件层。也可以这样理解,镜像是对象的模板——类,容器是类生成的... 查看详情