docker 的简单使用 运行一个ubuntu容器  外部访问容器 发布docker image到仓库

咱们要在cenots7操作系统下,以docker下载一个ubuntu image文件,然后以image启动容器

docker pull ubuntu

或者指定版本:docker pull ubuntu:14.04

运行这个乌班图容器!

docker run  ubuntu


也可以指定参数启动
docker run - rm ubuntu

dicker 启动的参数

docker run就是运行容器的命令。
参数
 -it : -i 是交互式操作,-t是终端
 --rm  :   容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
 ubuntu:14.04   这指的是镜像文件
 bash   :  指定用交互式的shell,因此需要bash命令





eg:
    docker run --rm ubuntu  # 启动后删除 不留痕迹 docker  ps -a 也看不到
  docker run -it --rm ubuntu # 启动是的交互命令结束不留痕迹

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

用 --rm 参数启动的和无参数的是不一样的

 docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

执行了docker run -it --rm unbuntu 之后交互界面的信息都不一样了

在这个里面查看系统都显示是ubuntu的了   cat /etc/os-release

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

 docker  运行centos

下载centos后 然后用-it进行centos容器内的交互界面

-d后台运行

docker run -d centos  /bin/bash -c  '你要执行的shell脚本'


docker run -d centos  /bin/bash -c 'while true;do echo hello docker66666;sleep 1;done'

然后就会返回给我们一段执行后的启动后的id

然后我们想要查看这个进程运行的信息

 docker exec -it  要查看的进程id  /bin/bash 


 docker exec -it  78b  /bin/bash 

查看容器内的输出

然后我们退出centos内的进程 到外面查看docker 的日志 因为刚才是在centos容器内  我们的docker 是安装在服务器内的 所以要到服务器的大环境内 而不是某一个docker容器内

docker  logs  +要查看的进程id

也可以在后面 加上-f 参数 可以一直查看  和tail -f 一样

 查看docker  的进程

docker ps

停止docker  进程

如果我们有docker进程这个时候不想让他跑了就用stop

docker  stop +要停止的docker进程

重现再跑起来 要么执行最开始跑的命令 要么就执行start

docker start  +要启动的进程

先查看以前跑过的进程再start

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

docker 自定义镜像  commit(构建自定义的镜像)

我们在启动 的docker进程有个id  我们可以根据这个id来打包

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

docker  commit + 要打包的进程id  +新起的包名

外部访问容器

容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射

docker run -d -P trainning/webapp python app.py

参数解析:
  -d 后台运行容器
  -P 随机端口映射
  -p 宿主机端口容器端口(就是可以指定端口小写的p指定端口容器)
  

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

也可以通过-p参数指定映射端口

#指定服务器的9000端口,映射到容器内的5000端口
[root@oldboy_python ~ 16:46:13]# docker run -d -p 9000:5000 training/webapp python app.py c0b5a6278d0f4f2e9b9eba8680451111d8b911b61de0c37ea64cb337aefb854e

docker运行一个flask web应用,暴露端口供给windows使用

1、首先我们要先下载系统镜像 centos, 然后启动这个镜像生成容器

2、然后进入这个镜像内安装python2的软件管理工具 easy_install

3、安装flask

4、编写好flask脚本

5、退出容器产生容器id记录

6.提交此容器记录,构建镜像

7.查看镜像

8.运行flask_web镜像,暴露端口访问

9.此时在windows浏览器访问 7000端口的 flask应用

    1.docker run -it centos
    2. 安装 easy_install  命令,python2软件包管理
        yum install  python-setuptools 
    3.安装flask 
        easy_install flask
    4.编写好flask  web脚本 
    cd /home # 脚本写在home下
    然后yum install vim -y 安装vim 编辑器
    touch flask_web.py # 建立一个脚本文件编辑脚本
from flask import Flask app = Flask(__name__)

          @app.route('/')
          def index():
                return 'Hello This is docker'

        #此脚本当做模块导入时候,__main__里代码不执行
        #当做脚本文件直接运行的时候,执行__main__代码
        if __name__ == '__main__':
           app.run(host='0.0.0.0',port=9000)
           
    5.退出容器,产生容器id记录
        exit 
    6.提交此容器记录,构建镜像(找到你的容器内的id你进入的时候会有显示的)
        docker commit 976  s12/flask_web
    7.查看镜像
        docker images 
    8.运行flask_web镜像,暴露端口访问   启动的时候要指定python解释器  
        docker run -d -p 7000:9000  s12/flask-web python /home/flask-web.py
    9.此时在windows浏览器访问 7000端口的 flask应用

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

然互docker ps查看是否启动了 

 在启动的时候你要指定你的镜像 然后指定python解释器去启动这个镜像中的具体的文件 caicai/flask-web 是你的打包的镜像然后指定python去启动中的具体的python文件

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

接着访问指定的7000端口就能看到内容了

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

docker hub

 docker hub 顾名思义就是一个类似于我们常用的github存储代码一样这个是存储我们的  生成的容器的

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

首先我们打包的镜像 直接推送是不可以的  需要先起个tag名字才能进行推送的

 打包:

docker  tag 镜像名字   你的dockerhub名字/起的tag名字

docker tag caicai/flask-web zyltry/caicai  # 给我的caicai/flask-web镜像在zyltry的dockerhub下起个caicai的tag

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

 然后直接docker images  然后把你起的tag生成的镜像名字推上去

直接docker  push + 镜像名字

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

 然后 就可以在你的 docker  hub上看到你提交的信息了

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

发布docker image到仓库

第一种,docker hub公有镜像发布

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库
1.docker提供了一个类似于github的仓库dockerhub,
网址https://hub.docker.com/需要注册使用
2.注册docker id后,在linux中登录dockerhub
docker login

注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
docker tag chaoyu/centos-vim zyltry163/centos-vim
语法是: docker tag 镜像名 docker hub名字/仓库名

3.推送docker image到dockerhub docker push 镜像名字:latest 4.在dockerhub中检查镜像 https://hub.docker.com/ 5.删除本地镜像,测试下载pull 镜像文件 docker pull 镜像名

 

私有仓库:

但是这种镜像仓库是公开的,其他人也是可以下载,并不安全,因此还可以使用docker registry官方提供的私有仓库

 首先你要对你的要私有化的镜像 进行tag的添加 不添加是无法进行上传的

1.官方提供的私有仓库docker registry用法
https://yeasy.gitbooks.io/docker_practice/repository/registry.html
2.一条命令下载registry镜像并且启动私有仓库容器
私有仓库会被创建在容器的/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry下
端口映射容器中的5000端口到宿主机的5000端口
docker run -d 
    -p 5000:5000 
    -v /opt/data/registry:/var/lib/registry 
    registry

检查启动的registry容器
docker ps
4.测试连接容器
telnet 192.168.119.10 5000
5.修改镜像tag,以docker registry的地址端口开头
docker tag hello-world:latest 192.168.119.10:5000/hello-world:latest
6.查看docker镜像,找到registry的镜像
docker images
7.Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据
[root@master /]# cat /etc/docker/daemon.json
{"registry-mirrors": ["http://95822026.m.daocloud.io"],
"insecure-registries":["192.168.119.10:5000"]
}
写入到docker服务中,写入到[Service]配置块中,加载此配置文件 [root@master home]# grep 'EnvironmentFile=/etc/docker/daemon.json' /lib/systemd/system/docker.service如果没有就对下面的进行添加信息

 编辑docker 配置让他加载你的配置信息 :vim /lib/systemd/system/docker.service             添加:EnvironmentFile=/etc/docker/daemon.json 8.修改了docker配置文件,重新加载docker systemctl daemon-reload
 
9.重启docker
systemctl restart docker
10.重启了docker,刚才的registry容器进程挂掉了,因此重新启动它
docker ps -a
docker start 容器id
11.推送本地镜像
docker push 192.168.119.10:5000/hello-world

12.由于docker registry没有web节目,但是提供了API数据
官网教程:https://docs.docker.com/registry/spec/api/#listing-repositories

curl http://192.168.119.10:5000/v2/_catalog
或者浏览器访问http://192.168.119.10:5000/v2/_catalog
13.删除本地镜像,从私有仓库中下载
docker pull 192.168.119.10:5000/hello-world

 首先 先对你的 要私有的镜像进行tag起名

docker   +选择的镜像名   tag 你的ip和规定的端口号/起的标签名

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

然后你还需要修改一个配置因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据

vim /etc/docker/daemon.json

 docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

然后

grep 'EnvironmentFile=/etc/docker/daemon.json' /lib/systemd/system/docker.service

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

如果没反应就代表没有

然后编辑 /lib/systemd/system/docker.service

vim /lib/systemd/system/docker.service 

把信息:加入到service中 让你的docker加载这个文件
EnvironmentFile=/etc/docker/daemon.json

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

然后重新加载 重启你的docker

[root@VM_0_9_centos ~]# systemctl daemon-reload
[root@VM_0_9_centos ~]# systemctl restart docker

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

然后找到你的刚起启动的rgister进程启动因为重新加载挂了

docker  ps -a

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

重启register容器

docker  start +容器id

然后你用浏览器访问

或者浏览器访问http://ip地址:5000/v2/_catalog

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

下面docker  push  你刚才建立的私有仓库的tag

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

 再访问你的界面就有了

docker 的简单使用
运行一个ubuntu容器 
外部访问容器
发布docker image到仓库

也可以从你的私有仓库下载镜像了


从私有仓库中下载
docker pull +私有的镜像


从私有仓库中下载 docker pull
192.168.119.10:5000/hello-world