我是靠谱客的博主 快乐信封,最近开发中收集的这篇文章主要介绍Linux系统 09 python环境配置09 之 DockerDocke用场景服务器环境发展过程Docker  VS 传统虚拟机docker三大概念Centos安装Docker Docker常用命令: 外部访问容器 Docker镜像加速器 创建提交自定义的镜像利用dockerfile定制镜像发布自己的docker镜像到Docker hubDocker仓库(repository)    docker的数据集挂载功能Docker网络,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

让开发人员最头疼的麻烦事之一就是环境配置了,每台计算机的环境都不相同,应该如何确保自己的程序换一台机器能运行起来呢?

用户必须确保的是:

  1. 操作系统的相同
  2. 各种平台库和组件的安装
  3. 例如python依赖包,环境变量等

如何一些低版本的依赖模块和当前环境不兼容,那就头疼了。。。。。

如果环境配置这么痛苦的话,换一台机器,就得重新配置一下,那么在安装软件的时候,带着原始环境一模一样的复制过来。

以上问题的解决方法有两个:

  • 解决方案一 虚拟机定制操作系统模板, 例如vmware esxi  定制一个 centos镜像板块,我在这模板中定制我的功能,安装vim  安装 python3  安装 django等 。 通过镜像模块安装系统,也可以解决环境依赖的问题。但是虚拟化也是有局限性的,每一个虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多道一定程度时,操作系统本身资源也就消耗殆尽,或者说必须扩容
  • 解决方案二  Linux容器,Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。在正常进程的外面套了一个保护层,对于容器里面进程来说,它接触的资源都是虚拟的,从而实现和底层系统的隔离。

 服务器环境分为三个阶段: 开发->测试->上线

  • 开发环境(本地测试代码环境):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。
  • 测试环境( 即将上线服务器):一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。
  • 生产环境(线上服务器):是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。

三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境。

通俗一点就是:

1:开发环境:项目尚且在编码阶段,我们的代码一般在开发环境中 不会在生产环境中,生产环境组成:操作系统 ,web服务器 ,语言环境。  php 。 数据库 。 等等

2:测试环境:项目完成测试,修改bug阶段

3:生产环境:项目数据前端后台已经跑通,部署在阿里云上之后,有客户使用,访问,就是网站正式运行了

进一步详细学习  >>> 点击

  • docker基础入门
  • docker网络

Docke用场景

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。 Docker 使用 Google 公司推出的 Go 语言 进行开发实现。 docker是linux容器的一种封装,提供简单易用的容器使用接口。它是最流行的Linux容器解决方案。 docker的接口相当简单,用户可以方便的创建、销毁容器。 docker将应用程序与程序的依赖,打包在一个文件里面。运行这个文件就会生成一个虚拟容器。 程序运行在虚拟容器里,如同在真实物理机上运行一样,有了docker,就不用担心环境问题了。

web应用的自动化打包和发布
自动化测试和持续集成、发布
在服务型环境中部署和调整数据库或其他应用

Docker和虚拟解释器的区别是:

  • virtualenv是python解释器的虚拟环境,和操作系统无关,在机器上可以配置多个python解释器
  • Docker是在物理操作系统上的一个环境隔离(虚拟环境)

Docker容器是操作系统级别的,虚拟解释器是软件运行环境.

服务器环境发展过程

第一代:服务器+ centos  
第二代:

个人  服务器 + windows+vmware workstation(学习版)+centos7     机器垃圾,只能安装10个以内的虚拟机 +  django应用
            
  企业      服务器 + vmware esxi(企业版虚拟化)+linux 
                                        +centos
                                        +redhat
                                        +suse
第三代: 服务器 + opnstatck 云虚拟化

第四代:服务器 + vmware esxi +  docker + django应用 


我们个人学习 笔记本+vmware +centos+docker +django 

我之前企业应用如下: 
dell poweer ege R720  
        实体服务器,26台,托管在上海世纪互联机房托管中心
        还有自建机房(5台内网服务器)
        通过R720实体服务器,通过vmware esxi(支持windows,linux)
        虚拟化出280+的linux操作系统
            100+redhat
            100+centos 
            

               

Docker  VS 传统虚拟机

特性

容器

虚拟机

启动

秒级

分钟级

硬盘使用

一般为 MB

一般为 GB

性能

接近原生

系统支持量

单机支持上千个容器

一般几十个

docker三大概念

容器三大基本概念,docker整个生命周期就是这三个概念

  • 镜像 image   Docker镜像就是一个只读的模板。镜像可以用来创建Docker容器。Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
  • 容器 container
  • 仓库 repository  存放镜像文件的地方,我可以去公网去,下载镜像

Centos安装Docker

方法一  编译安装,源码安装

方法二 yum安装

如果网速太慢,你可以选择阿里云的源,缺点就是版本低,选择用aliyun的yum源,docker就存在epel源中
如果网速够快,或者在公司中,一定要装官方源配置docker的官方源,一定是官方的最好啊

请遵循官方安装方式!!!

https://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-after-using-the-convenience-script


    #由于配置不了官方的docker仓库,咱们选择阿里云
    1.   安装docker服务端, 使用yum安装可一次性将Docker及其依赖软件全部安装

yum install docker* docker-*  -y      #安装

yum remove docker-*       # 卸载

安装过程, 注意中间需要自己输入一次 y :

[root@MiWiFi-R4CM-srv /]# yum install docker* docker-*  -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile

******

事务概要
=======================================================================
安装  13 软件包 (+31 依赖软件包)
升级            (  7 依赖软件包)

总计:75 M
总下载量:66 M
Is this ok [y/d/N]: y            #注意此处需要自己输入 y

*******************************************************************

作为依赖被升级:
  libsemanage.x86_64 0:2.5-14.el7                                      
  *******    
  setools-libs.x86_64 0:3.3.8-4.el7                                

完毕!

 


2.   配置阿里云镜像加速器

docker安装完毕, 当使用 docker pull  命令下载镜像时, 原配下载很慢, 容易下载失败, 此时可以配置加速器快速下载.

配置方法如下: 

点击  

[root@MiWiFi-R4CM-srv sysconfig]# vim /etc/docker/daemon.json
[root@MiWiFi-R4CM-srv sysconfig]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
[root@MiWiFi-R4CM-srv sysconfig]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: http://docs.docker.com

3月 30 22:57:14 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 22:57:28 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 22:57:41 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 22:58:06 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 22:59:56 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 23:02:24 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 23:02:24 MiWiFi-R4CM-srv systemd[1]: Stopping Docker Application ....
3月 30 23:02:24 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 23:02:24 MiWiFi-R4CM-srv dockerd-current[55187]: time="2020-03-30T...
3月 30 23:02:25 MiWiFi-R4CM-srv systemd[1]: Stopped Docker Application C....
Hint: Some lines were ellipsized, use -l to show in full.
[root@MiWiFi-R4CM-srv sysconfig]# systemctl start docker
[root@MiWiFi-R4CM-srv sysconfig]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2020-03-30 23:06:34 CST; 2s ago
     Docs: http://docs.docker.com
 Main PID: 57956 (dockerd-current)
    Tasks: 26
   CGroup: /system.slice/docker.service
           ├─57956 /usr/bin/dockerd-current --add-runtime docker-runc=/usr...
           └─57966 /usr/bin/docker-containerd-current -l unix:///var/run/d...

3月 30 23:06:32 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:33 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:33 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:33 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:34 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:34 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:34 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:34 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:34 MiWiFi-R4CM-srv dockerd-current[57956]: time="2020-03-30T...
3月 30 23:06:34 MiWiFi-R4CM-srv systemd[1]: Started Docker Application C....
Hint: Some lines were ellipsized, use -l to show in full.
[root@MiWiFi-R4CM-srv sysconfig]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ... 
latest: Pulling from docker.io/library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for docker.io/centos:latest

 

 2. 启动docker
    systemctl start docker   # 启动docker容器

[root@MiWiFi-R4CM-srv /]# systemctl start docker


    systemctl status  docker   # 查看docker容器运行状态

启动docker:systemctl start docker

停止docker:systemctl stop docker

重启docker:systemctl restart docker

查看docker状态:systemctl status docker

开机启动:systemctl enable docker

 

 docker运行后, 可查询运行状态


    
    3.查看docker是否正确启动

docker version


    4.简单使用docker
    docker images  #查看镜像
    docker run 镜像名/镜像id(可以写前三位)   #运行一个docker容器实例立即退出, 但是会有容器运行记录

     docker run -it 镜像名     # 运行并进入一个容器
    docker ps  #查看docker进程
    docker ps -a  #查看所有运行过的docker容器记录

查看镜像并运行容器:

运行后发现容器是一个没有vim的centos系统

退出容器使用: exit

方法三. rpm安装

此安装麻烦,一般不用


Docker常用命令:


增  增加容器记录,启动容器

docker run 镜像id/镜像名  #运行创建一个容器container实例

docker run -it  centos   #此命令会 进入到容器空间内,进入到容器的centos中
-i 交互式界面
-t 是开启一个终端

docker run -it  --rm  ubuntu   #运行一个乌班图容器,并且在退出是,删除容器运行记录

docker run centos   
#直接运行这个centos镜像,会生成一个容器记录
#此时就会生成一个容器记录,但是容器中并没有任何的后台程序,因此直接就挂掉
# 你会发现,容器死活不生成,docker ps 看不到记录,

docker run -d centos /bin/sh -c "while true;do echo hello s14 docker~~~~; sleep 1;done"
#一定会生成一个容器记录
#docker ps  能不能看到记录?

-d 参数是  后台运行
/bin/sh  调用shell解释器
-c 指明一段shell语法

docker pull centos  #下载docker的镜像


docker rm 容器id  #docker rm删除的是已经停止的容器id

docker rmi  镜像id   #删除一个镜像记录 

docker rm `docker ps -aq` # 一次性删除所有容器id记录
    ` `   #反引号是取命令的运行结果 

docker rmi `docker images -aq`   #一次性删除所有镜像记录


docker commit  #提供容器记录,为新的镜像
docker stop  容器id  #停止正在运行的容器
docker start 容器id  #启动一个关闭中的容器

#导出镜像
docker save centos > /opt/centos.tar.gz  #导出docker镜像至本地

#导入镜像
docker load < /opt/centos.tar.gz
#通过--name参数给容器记录,加上别名
docker run --name s14hehe -d centos /bin/sh -c "while true;do echo hello s14 docker~~~~; sleep 1;done"

#进入正在运行的容器
docker exec -it c49  /bin/bash


-it  交互式的操作终端
/bin/bash使用shell解释器,只有在redhat,centos系统中,才能用/bin/bash 


docker image  ls  #查看镜像记录
docker images  #查看镜像记录 

docker ps    #查看容器记录  ,只能查看到正在运行中的容器
             #正在运行中的容器,代表,容器后台一定有个进程在运行
             
docker ps -a #查看停止的和在运行的容器记录

docker container ls -a  #等同于docker ps -a 

docker logs -f 容器id  #查看正在运行中的 容器内日志
-f  不间断打印 

常用镜像和容器命令总结:

docker使用命令回顾:
镜像
docker image ls
docker images
docker pull 镜像名  	#docker仓库,dockerhub
docker push 镜像名    #把本地的镜像推送到 dockerhub仓库
docker search 镜像名
docker rmi  删除镜像
docker version #查看docker版本,查看到server 和client两个端
systemctl start docker   #启动docker
docker save  镜像名  >  /data/centos.tar.gz  #导出镜像
docker load  <  /data/centos.tar.gz  #导入镜像    
docker run  镜像名  #运行镜像文件,产生一个容器实例


容器
docker start 容器id 
docker stop 容器id
docker exec -it   容器id #进入正在运行的容器
	-i 交互式操作
	-t  开启一个终端

docker run 镜像名 #创建容器实例
docker rm  容器id  #删除容器记录,必须提前docker stop 容器id ,只能杀死已经停止的容器
docker ps  #查看容器正在运行记录
docker ps -aq  #显示所有容器记录的id号
	-a  显示所有容器记录
	-q	 显示容器id
	
docker rm  `docker ps -aq`  #一次性删除所有容器记录

docker container ls  #查看容器正在运行记录
docker commit  容器id记录  #提交这个容器,创建一个新的镜像
docker logs  #查看容器运行日志 
	-f   #不间断打印容器日志
	
docker port   #查看容器的端口映射关系(外部访问到容器内的端口)
docker run -d  centos  -P  
-d 后台运行
-P   随机映射端口  
-p  9000(宿主机):5000(容器内) 
--name   给创建的容器记录,添加别名

 


外部访问容器

通过-P参数进行端口映射

#运行一个web容器实例
1.下载镜像
docker pull training/webapp  
2.运行镜像,产生容器记录
docker run -d -P 6fa  python app.py
-d 后台运行
-P  将容器内的5000端口随机映射到宿主机的一个端口

docker port 容器id 
[root@node1 /opt/redis-4.0.10/src 16:00:41]#docker port ebb7
5000/tcp -> 0.0.0.0:32768

外部访问容器运行示例:

liunx系统端:

[root@MiWiFi-R4CM-srv /]# docker pull training/webapp
Using default tag: latest
Trying to pull repository docker.io/training/webapp ... 
latest: Pulling from docker.io/training/webapp
e190868d63f8: Pull complete 
909cd34c6fd7: Pull complete 
0b9bfabab7c1: Pull complete 
a3ed95caeb02: Pull complete 
10bbbc0fc0ff: Pull complete 
fca59b508e9f: Pull complete 
e7ae2541b15b: Pull complete 
9dd97ef58ce9: Pull complete 
a4c1b0cb7af7: Pull complete 
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for docker.io/training/webapp:latest
[root@MiWiFi-R4CM-srv /]# docker run -d -P 6fa python app.py
a0361209a6367028f39daa2f2481cf447f16fa8db1d3be194c65d80e554d6e07
[root@MiWiFi-R4CM-srv /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
a0361209a636        6fa                 "python app.py"     10 seconds ago      Up 5 seconds        0.0.0.0:32768->5000/tcp   awesome_engelbart
[root@MiWiFi-R4CM-srv /]# docker port a03
5000/tcp -> 0.0.0.0:32768
[root@MiWiFi-R4CM-srv /]# 

浏览器输入地址运行:


Docker镜像加速器


#执行命令
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
#其实就是更改了,docker的一个仓库源
[root@node1 /opt/redis-4.0.10/src 14:48:26]#cat /etc/docker/daemon.json
{
    "registry-mirrors": [
        "http://95822026.m.daocloud.io"
    ],
    "insecure-registries": []
}

 配置linux的 Docker 镜像站:

[root@MiWiFi-R4CM-srv /]# cat /etc/docker/daemon.json
{}

[root@MiWiFi-R4CM-srv /]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
docker version >= 1.12
{"registry-mirrors": ["http://95822026.m.daocloud.io"],}
Success.
You need to restart docker to take effect: sudo systemctl restart docker 

[root@MiWiFi-R4CM-srv /]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://95822026.m.daocloud.io"],}

# 发现docker不能启动
[root@MiWiFi-R4CM-srv /]# systemctl start docker  
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.


[root@MiWiFi-R4CM-srv /]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://95822026.m.daocloud.io"],}
[root@MiWiFi-R4CM-srv /]# vim /etc/docker/daemon.json       # 直接修改/etc/docker/daemon.json
[root@MiWiFi-R4CM-srv /]# cat /etc/docker/daemon.json
{
    "registry-mirrors": [
        "http://95822026.m.daocloud.io"
    ],
    "insecure-registries": []
}

 


创建提交自定义的镜像

(自己修改了容器记录,提交成一个新的镜像,可以发给别人使用)
#需求是?
1.默认的centos镜像,没有vim 
2.我们自己run一个容器记录,安装vim,然后提交成新的镜像文件
docker commit 24c1ef3f8da8 s14/centos-vim

3.查看新的镜像记录
docker images  
s14/centos-vim          latest              01b0298ec5b0        7 seconds ago       327 MB


4.可以通过新的带有vim的镜像运行容器记录,通过此方法可以解决环境难配置的问题
docker run -it s14/centos-vim    /bin/bash 

 

1.我们进入交互式的centos容器中,发现没有vim命令
docker run -it centos
2.在当前容器中,安装一个vim
yum install -y vim
3.安装好vim之后,exit退出容器
exit
4.查看刚才安装好vim的容器记录
docker container ls -a
5.提交这个容器,创建新的image
docker commit 059fdea031ba chaoyu/centos-vim
6.查看镜像文件
[root@master /home]docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
chaoyu/centos-vim   latest              fd2685ae25fe        5 minutes ago       348MB

带有vim的centos容器创建过程示例:

[root@MiWiFi-R4CM-srv /]# docker run -it centos
[root@046f946b55b1 /]# vim
bash: vim: command not found
[root@046f946b55b1 /]# yum install -y vim
Failed to set locale, defaulting to C.UTF-8

**************                        

Complete!
[root@046f946b55b1 /]# vim
[root@046f946b55b1 /]# exit
exit
[root@MiWiFi-R4CM-srv /]# docker container ls -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                  PORTS               NAMES
046f946b55b1        centos              "/bin/bash"              About a minute ago   Exited (0) onds ago                         heuristic_brattain
f15d93238bab        ubuntu              "/bin/bash"              20 minutes ago       Exited (0) utes ago                         naughty_saha
4ada6ebffeb8        centos              "/bin/sh -c 'while..."   30 minutes ago       Exited (137inutes ago                       lucid_minsky
7ae1976783eb        centos              "/bin/bash"              42 minutes ago       Exited (0) utes ago                         heuristic_turing

[root@MiWiFi-R4CM-srv /]# docker commit 046f946b55b1 mycontainer/centos-vim
sha256:4ebfb52e8f614cbe313c962b9f3f199805f1a1b90a8d3d33f4d2fc4dd843ab81
[root@MiWiFi-R4CM-srv /]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
mycontainer/centos-vim   latest              4ebfb52e8f61        16 seconds ago      301 MB
docker.io/ubuntu         latest              4e5021d210f6        9 days ago          64.2 MB
docker.io/centos         latest              470671670cac        2 months ago        237 MB
[root@MiWiFi-R4CM-srv /]# 

 

利用dockerfile定制镜像

 镜像是容器的基础,每次执行docker run的时候都会指定哪个镜像作为容器运行的基础。我们之前的例子都是使用来自docker hub的镜像,直接使用这些镜像只能满足一定的需求,当镜像无法满足我们的需求时,就得自定制这些镜像。

镜像的定制就是定制每一层所添加的配置、文件。如果可以把每一层修改、安装、构建、操作的命令都写入到一个脚本,用脚本来构建、定制镜像,这个脚本就是dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令 构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

 脚本的概念就是,将你想做的事,写入到一个文件中,然后执行这个文件,就是执行一个脚本

需求:  定制一个拥有nginx和vim的centos镜像文件

只需要如下三条命令, 就可以利用Dockerfile脚本定制entos-vim-nginx镜像文件:

FROM centos
RUN yum install vim -y 
RUN yum install nginx -y

 

定制镜像示例: 打包flask程序与dockerfile

步骤1: 准备工作

准备在/data/mydocker文件夹下完成本示例,准备工作如下:

1. 创建工作目录及文件

[root@MiWiFi-R4CM-srv data]# cd /data

[root@MiWiFi-R4CM-srv data]# mkdir mydocker
[root@MiWiFi-R4CM-srv data]# cd mydocker/
[root@MiWiFi-R4CM-srv mydocker]# ll
总用量 0
[root@MiWiFi-R4CM-srv mydocker]# touch Dockerfile
[root@MiWiFi-R4CM-srv mydocker]# touch myflask.py
[root@MiWiFi-R4CM-srv mydocker]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月  31 09:46 Dockerfile
-rw-r--r--. 1 root root 0 3月  31 09:48 myflask.py

2. 进入容器环境准备网络工具,准备好后退出

[root@MiWiFi-R4CM-srv mydocker]# docker run -it centos
[root@73fc77f24873 /]# yum install net-tools -y
****
Installed:
  net-tools-2.0-0.51.20160912git.el8.x86_64                                     

Complete!
[root@73fc77f24873 /]# exit
exit
[root@MiWiFi-R4CM-srv mydocker]#

 步骤2. 准备一个flask的python代码

[root@MiWiFi-R4CM-srv mydocker]# vim myflask.py 
[root@MiWiFi-R4CM-srv mydocker]# cat myflask.py 

#coding:utf8
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
    return "hello docker, this is my 1 Dockerfile test!"
if __name__=="__main__":
    app.run(host='0.0.0.0',port=8080)

 步骤3. 准备好所有需要的文件CentOS-Base.repo和epel.repo, 方便下载.

两个文件可以在系统中查找复制到/data/mydocker下

[root@MiWiFi-R4CM-srv /]# find / -name CentOS-Base.repo
/etc/yum.repos.d/repo_back/CentOS-Base.repo
/etc/yum.repos.d/CentOS-Base.repo

[root@MiWiFi-R4CM-srv mydocker]# find / -name epel.repo
/etc/yum.repos.d/epel.repo

[root@MiWiFi-R4CM-srv mydocker]# ls
CentOS-Base.repo  Dockerfile  epel.repo  myflask.py

步骤4: 准备Dockerfile文件

[root@MiWiFi-R4CM-srv mydocker]# cat Dockerfile 

FROM centos        
LABEL maintainer="Chao Wang<ChaoWang@163.com>"
ADD CentOS-Base.repo /etc/yum.repos.d/
ADD epel.repo /etc/yum.repos.d/
RUN yum clean all
RUN yum install python-pip -y
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
COPY myflask.py /app/
WORKDIR /app
EXPOSE 8080
CMD ["python","myflask.py"]

Dockerfile解释:

  •     1.引入一个centos镜像,为基础镜像
  •     2.作者注释信息
  •     3.添加本地的两个yum文件,到容器的/etc/yum.repos.d/底下
  •     4.清空yum缓存
  •     5.yum安装pip工具
  •     6.pip安装flask模块,指定清华源
  •     7.拷贝本地的flask代码,到容器的/app/目录下
  •     8.切换工作目录,到/app底下
  •     9.暴露容器的8080端口,然后在运行镜像时候,加上-p参数,指定端口映射
  •     10.执行命令,运行flask

步骤5  构建docker镜像文件

docker build -t yuchao163/s14-flask-docke  .

#构建当前目录的Dcokerfile,然后构建出一个名为yuchao163/s14-flask-docker 这个的镜像文件
-t  tag参数,给镜像加上标记名
dockerhub账户名:yuchao163

dockerhub账户名/镜像名   #是为了后面讲docker镜像,推送到dockerhub

步骤6  查看镜像是否构建完成

docker images

步骤7  运行这个镜像文件,产生容器实例

docker run -p 9000:8080   -d 43d

-p  映射9000端口到容器的8080
-d 后台运行 
43d  镜像id

此时可以在浏览器中访问

步骤8. 查看已经运行的docker实例

docker ps 

发布自己的docker镜像到Docker hub

学习dockerhub,发布自己的docker镜像
    1.我可以先下载其他人的docker镜像
    
    docker pull yuchao163/hello-world-docker
    
    2.上传自己的docker镜像 
        docker login  #登录自己的docker hub账号 ,输入密码 
        #docker就会有你自己的dockerhub账号信息 xxxxxx
        
    3.更改docker镜像的名字,也就是加上一个tag标记
        docker tag s14/centos-vim xxxxxxx/s14-centos-vim
        docker tag  现有镜像名字     dockerhub账户名/新的镜像名
    4.登录后可以推送镜像文件,此时推送给的是自己的yuchao163账号仓库下
        docker push xxxxxx/hello-docker 
        
    5.登录https://hub.docker.com/查看自己推送的公网镜像

 

Docker仓库(repository)

构建公司私有docker仓库,其实就是搭建一个api服务器,通过api可以下载镜像


    步骤1.下载docker官方提供的私有仓库镜像

docker pull registry

   步骤2. 查看镜像
    docker images 
   步骤 3. 启动一个私有仓库容器

docker run -d 
	-p 5000:5000 
	-v /opt/data/registry:/var/lib/registry 
	registry


   步骤 4. 此时可以检查容器进程
    docker ps 
  步骤  5. 此时私有仓库就打开了5000端口,通过端口映射,访问宿主机的5000端口,查看是否通信
    yum install telnet -y      #  telnet工具可以检查端口通信
    
    telnet 127.0.0.1 5000   #  检测5000端口是否通信

[root@MiWiFi-R4CM-srv mydocker]# yum install telnet -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
******

已安装:
  telnet.x86_64 1:0.17-64.el7                                                                                       

完毕!
[root@MiWiFi-R4CM-srv mydocker]# telnet 127.0.0.1 5000
Trying 127.0.0.1...
Connected to 127.0.0.1.        ##  说明通信正常
Escape character is '^]'.
[root@MiWiFi-R4CM-srv mydocker]# telnet 192.168.31.183 5000
Trying 192.168.31.183...
Connected to 192.168.31.183.
Escape character is '^]'.
[root@MiWiFi-R4CM-srv mydocker]# telnet 192.168.31.183 4000
Trying 192.168.31.183...
telnet: connect to address 192.168.31.183: Connection refused   # 通信失败

    如果通信正常,  浏览器地址可以访问端口获取json数据:   http://192.168.119.10:5000/v2/_catalog


  步骤  6. 修改本地镜像的tag标签,标注我要往哪push镜像

docker tag docker.io/centos  192.168.31.183:5000/mycangku

执行命令后可获取新的镜像: 

   
  步骤  7. 修改docker配置,允许非安全的传输方式
    
        1.vim /etc/docker/daemon.json,写入信息,私有仓库地址,都得改成自己的
            {"registry-mirrors": ["http://95822026.m.daocloud.io"],
            "insecure-registries":["192.168.31.183:5000"]
            }
        2.修改docker.server 
            vim /lib/systemd/system/docker.service
            #写入如下信息,请在[service]中写入        
            [Service]
            EnvironmentFile=/etc/docker/daemon.json        

 

 修改示例:

[root@MiWiFi-R4CM-srv mydocker]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://q1fet2ok.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.31.183:5000"]
}
[root@MiWiFi-R4CM-srv mydocker]# cat /lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
EnvironmentFile=/etc/docker/daemon.json
Type=notify
NotifyAccess=main
***************************


   步骤 8.  重启docker服务,使得生效
    systemctl daemon-reload  #重新加载docker配置文件
    
    systemctl restart docker #重启docker服务 


    步骤9.  重启docker服务,会停止容器,因此要再次启动
    
        docker ps -a 
        docker start b23bcfe42e80  #启动这个私有仓库容器

[root@MiWiFi-R4CM-srv mydocker]# docker start 3df1610b892d
3df1610b892d

启动私有仓库容器需要找到容器ID

    步骤10.   推送本地镜像到 私有仓库 192.168.31.183:5000
docker push 192.168.31.183:5000/mycangku

[root@MiWiFi-R4CM-srv mydocker]# docker push 192.168.31.183:5000/mycangku
The push refers to a repository [192.168.31.183:5000/mycangku]
0683de282177: Pushed 

    步骤11. 此时访问api接口,查看私有仓库的数据
    http://192.168.12.96:5000/v2/_catalog

    步骤12.  此时,可以docker pull 192.31.183:5000/mycangku 下载镜像

docker pull 192.168.31.183:5000/mycangku

私有仓库镜像删除下载实验:      

 我们先删除该镜像,在进行下载:

root@MiWiFi-R4CM-srv mydocker]# docker rmi 192.168.31.183:5000/mycangku
[root@MiWiFi-R4CM-srv mydocker]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
<none>                      <none>              994f9a251511        3 hours ago         238 MB
mycontainer/centos-vim      latest              4ebfb52e8f61        13 hours ago        301 MB
docker.io/ubuntu            latest              4e5021d210f6        10 days ago         64.2 MB
docker.io/registry          latest              708bc6af7e5e        2 months ago        25.8 MB
docker.io/centos            latest              470671670cac        2 months ago        237 MB
docker.io/training/webapp   latest              6fae60ef3446        4 years ago         349 MB
[root@MiWiFi-R4CM-srv mydocker]# docker pull 192.168.31.183:5000/mycangku
Using default tag: latest
Trying to pull repository 192.168.31.183:5000/mycangku ... 
latest: Pulling from 192.168.31.183:5000/mycangku
Digest: sha256:9e0c275e0bcb495773b10a18e499985d782810e47b4fce076422acb4bc3da3dd
Status: Downloaded newer image for 192.168.31.183:5000/mycangku:latest

下载后又有了


  
docker的数据集挂载功能


-v 参数 挂载宿主机的文件:容器内的文件夹   
    -v  /opt/data:/opt/s14/ 
    
docker run -p 8000:8080 -v /opt/s14:/opt/data/ -d 43d
    启动容器,通过-v参数挂载
    挂载容器内的/opt/data/文件夹,其实访问的是宿主机的/opt/s14/

-p   7000:5000
 

简单应用测试:  

[root@MiWiFi-R4CM-srv /]# docker run -it -v /mytest/aaa:/mytest/ccc centos
[root@c8fc40a13058 /]# cd /mytest
[root@c8fc40a13058 mytest]# ls
ccc
[root@c8fc40a13058 mytest]# cd ccc/
[root@c8fc40a13058 ccc]# touch jjj.txt
[root@c8fc40a13058 ccc]# ls
jjj.txt
[root@c8fc40a13058 ccc]# exit
exit
[root@MiWiFi-R4CM-srv /]# ll /mytest
总用量 0
drwxr-xr-x. 2 root root 21 3月  31 14:53 aaa
[root@MiWiFi-R4CM-srv /]# ll /mytest/aaa
总用量 0
-rw-r--r--. 1 root root 0 3月  31 14:53 jjj.txt
[root@MiWiFi-R4CM-srv /]# 
[root@MiWiFi-R4CM-srv /]# docker run -it centos
[root@7ed885a420a7 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@7ed885a420a7 /]# cd /mytest
bash: cd: /mytest: No such file or directory
[root@7ed885a420a7 /]#
[root@MiWiFi-R4CM-srv /]# docker run -it -v /mytest/aaa:/mytest/ccc centos
[root@d056b2615555 /]# ls
bin  etc   lib	  lost+found  mnt     opt   root  sbin	sys  usr
dev  home  lib64  media       mytest  proc  run   srv	tmp  var
[root@d056b2615555 /]# ls /mytest/ccc
jjj.txt
[root@d056b2615555 /]# 

测试发现:

  • 如果没有目录, 执行命令后会自己创建
  • 启动容器后, 容器可以和宿主机对挂载目录共享操作
  • 如果退出容器,则挂载结束,再次进入容器时
    • docker run -it centos                          没有之前的挂载效果
    • docker run -it -v /mytest/aaa:/mytest/ccc centos     仍然有之前的挂载效果

Docker网络

Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。

  • 端口映射允许外部访问容器
  • --link 容器互联
  • 容器桥接网络

 

最后

以上就是快乐信封为你收集整理的Linux系统 09 python环境配置09 之 DockerDocke用场景服务器环境发展过程Docker  VS 传统虚拟机docker三大概念Centos安装Docker Docker常用命令: 外部访问容器 Docker镜像加速器 创建提交自定义的镜像利用dockerfile定制镜像发布自己的docker镜像到Docker hubDocker仓库(repository)    docker的数据集挂载功能Docker网络的全部内容,希望文章能够帮你解决Linux系统 09 python环境配置09 之 DockerDocke用场景服务器环境发展过程Docker  VS 传统虚拟机docker三大概念Centos安装Docker Docker常用命令: 外部访问容器 Docker镜像加速器 创建提交自定义的镜像利用dockerfile定制镜像发布自己的docker镜像到Docker hubDocker仓库(repository)    docker的数据集挂载功能Docker网络所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部