Docker入门

yum安装docker

  • 卸载旧版本
[root@instance-mtfsf05r ~]# sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  • 设置存储库
    [root@instance-mtfsf05r ~]# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    [root@instance-mtfsf05r ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 安装Docker
    安装社区版:[root@instance-mtfsf05r ~]# sudo yum install docker-ce(自己用安装社区)
    安装企业版:[root@instance-mtfsf05r ~]# sudo yum install docker-ee
  • 启动Docker
    [root@instance-mtfsf05r ~]# systemctl start docker
  • Docker启动状态
    [root@instance-mtfsf05r ~]# systemctl status docker
  • Docker版本信息
    [root@instance-mtfsf05r ~]# docker version

Docker常用的基本命令

  • 配置 Docker 镜像站,加速镜像下载
    [root@instance-mtfsf05r ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
    [root@instance-mtfsf05r ~]# sudo systemctl restart docker
    [root@instance-mtfsf05r ~]# cat /etc/docker/daemon.json

1734883-20190707191020980-187908637.jpg

  • 获取Docker镜像
    查找镜像:[root@instance-mtfsf05r ~]# docker search hello-world
    下载镜像:[root@instance-mtfsf05r ~]# docker search ubuntu

    下载过程可以看出镜像是由多层存储构成的,下载也是一层一层,并非单一文件
    下载过程中给出每一层的前12位ID,下载结束后会给出sha246的文件一致性j校验值

  • 更改linux的dns记录,提升网速
    [root@instance-mtfsf05r ~]# vi /etc/resolv.conf
    博主用的是百度的云主机,先前用的是腾讯的,两者相比较而言,百度的网速要快很多。下面是我的百度云主机中使用的dns:
    resolv.conf:
# Generated by NetworkManager
nameserver 172.16.0.3
nameserver 172.16.0.2
options rotate timeout:1
  • 查看Docker中已存在的镜像
    [root@instance-mtfsf05r ~]# docker images
    [root@instance-mtfsf05r ~]# docker image ls
  • 运行镜像,产生容器
    [root@instance-mtfsf05r ~]# docker run hello-world
    [root@instance-mtfsf05r ~]# docker run fce
    运行镜像可以使用docker run hello-world,也可以使用docker run 加上镜像号前三位。

    Docker容器必须有后台进程在运行,如果没有运行的进程,Docker容器实例就会挂掉

  • 检查正在运行的容器
    [root@instance-mtfsf05r ~]# docker ps
  • 检查所有运行过的容器记录
    [root@instance-mtfsf05r ~]# docker ps -a
  • 删除镜像文件
    删除镜像记录:docker rmi 镜像名(镜像id),如:[root@instance-mtfsf05r ~]# docker rmi centos
    删除容器记录:docker rm 容器id,如:[root@instance-mtfsf05r ~]# docker rm c5461ef5579a
    批量删除容器记录:docker rm 'docker ps -aq',如:[root@instance-mtfsf05r ~]# docker rm docker ps -aq
  • 交互式运行docker容器
    docker run -it --rm ubuntu bash
    docker run:运行容器的命令
    -it :-i 是交互式操作,-t是终端
    -rm : 容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
    ubuntu :镜像文件
    bash:指定用交互式的shell,因此需要bash命令
    示例:运行ubuntu
    [root@instance-mtfsf05r ~]# docker run -it --rm ubuntu

1734883-20190707191751346-1816221275.jpg
root@919a342809f9:/# hostname

1734883-20190707191812527-1046037911.jpg
查看ubuntu版本信息:root@919a342809f9:/# uname -a

1734883-20190707191835101-1657916260.jpg
查看ubuntu发行版版本:root@919a342809f9:/# cat /etc/os-release

1734883-20190707191909326-79644140.jpg
退出容器:root@919a342809f9:/# exit

Docker运行CentOS

  • 下载CentOS镜像
    [root@instance-mtfsf05r ~]# docker pull centos
  • 查看CentOS镜像
    [root@instance-mtfsf05r ~]# docker images
  • 运行一个交互式的容器
    docker run -it centosdocker run -it centos /bin/bash

    如果没有下载镜像使用这条命令后会自动下载CentOS镜像

  • 查看CentOS版本信息
    [root@e5b3b931b3d1 /]# cat /etc/os-release
  • 在CentOS中安装vim
    [root@e5b3b931b3d1 /]# yum install vim
  • 查看CentOS中的进程
    [root@0920c89974cf /]# ps -ef
  • 使用CentOS自带Python解释器运行Python脚本
    [root@0920c89974cf /]# vim hello_docker.py
    [root@0920c89974cf /]# python hello_docker.py Hello Docker!
    控制台:Hello Docker!
  • 后台模式启动Docker
    [root@instance-mtfsf05r ~]# docker run centos
    执行这个指令运行容器后“立刻”就退出了,Docker容器中必须要有后台进程在运行着,才能保证Docker不会挂掉。
    Docker提供的-d参数:后台运行容器,返回容器ID
    [root@instance-mtfsf05r ~]# docker run -d centos /bin/sh -c 'while true;do echo hello centos!;sleep 1;done'
  • 进入容器
    查看正在运行的容器:[root@instance-mtfsf05r ~]# docker ps
    进入容器:[root@instance-mtfsf05r ~]# docker exec -it 30025944a231 /bin/bash
  • 查看容器正在运行产生的日志
    [root@instance-mtfsf05r ~]# docker logs 5de(5de是容器ID前三位)
    [root@instance-mtfsf05r ~]# docker logs 5de -f
  • 启动容器
    [root@instance-mtfsf05r ~]# docker start 5de
  • 删除容器
    [root@instance-mtfsf05r ~]# docker stop 5de
    [root@instance-mtfsf05r ~]# docker rm 5de

删除容器

使用[root@instance-mtfsf05r ~]# docker rm docker ps -aq(docker ps -aq需要加反引号,编辑器的原因没有显示)只可以移除没有运行的容器。
如果想强制移除所有容器,需要使用:[root@instance-mtfsf05r ~]# docker rm -f docker ps -aq,危险命令,不建议使用。
【合理的做法】
对于正在运行的容器:
[root@instance-mtfsf05r ~]# docker ps[root@instance-mtfsf05r ~]# docker container ls(查看正在运行的容器)
可以先停止容器的运行:
[root@instance-mtfsf05r ~]# docker stop 300(300是容器ID)
然后删除所有容器:
[root@instance-mtfsf05r ~]# docker rm docker ps -aq

提交自定义创建的镜像

  • 进入交互式CentOS容器中
    [root@instance-mtfsf05r ~]# docker run -it centos
  • 在CentOS容器中安装vim
    安装:[root@71b84d6cfc20 /]# yum install vim -y
    退出容器:[root@71b84d6cfc20 /]# exit
  • 查看安装好的vim的容器记录
    [root@instance-mtfsf05r ~]# docker container ls -a[root@instance-mtfsf05r ~]# docker ps -a
  • 提交容器创建新的镜像
    [root@instance-mtfsf05r ~]# docker commit f23e390f54d2 thanlon/centos-vim
    [root@instance-mtfsf05r ~]# docker images
  • 运行新创建的容器
    [root@instance-mtfsf05r ~]# docker run -it thanlon/centos-vim[root@instance-mtfsf05r ~]# docker run -it a9f(a9f是镜像ID)
    查看镜像中是否有安装vim:[root@d90d346a47f3 /]# vim

外部访问容器(一)

  • 外部访问容器的大体过程
    Docker运行一个Web应用,通过端口映射,用户通过浏览器可以访问Docker中的web应用。
  • Docker中运行一个Python Web应用

    容器中可以运行网络应用,但是想要让外部访问这些应用,可以通过-p或-P参数指定端口映射。
    [root@instance-mtfsf05r ~]# docker run -d -P training/webapp python app.py
    -d: 后台运行容器
    -P:随机映射端口到容器开放的网络端口
    -p:可以通过-p参数指定映射端口,如:(访问宿主机的9000端口其实是访问Docker容器的5000端口)
    [root@instance-mtfsf05r ~]# docker run -d -p 4000:5000 training/webapp python app.py

  • 查看容器内的端口映射状态
    [root@instance-mtfsf05r ~]# docker port 47e(“47e是端口号前三位”)
    也可以使用docker ps查看到端口映射状态。

外部访问容器(二)

实例:Docker运行Flask Web应用,外部访问这个容器中的应用

  • 运行CentOS镜像
    [root@instance-mtfsf05r ~]# docker run -it centos
  • 在容器中easy_install模块
    [root@09a475fade35 /]# yum install python-setuptools -y
  • 安装Flask模块
    [root@09a475fade35 /]# easy_install flask
    检验是否安装成功:import flask
    [root@2471dd89bbc1 /]# python
Python 2.7.5 (default, Oct 30 2018, 23:45:53)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
>>>
  • 写一个Flask Web脚本
    在home目录下新建Flask脚本文件 flask-web.py:
    [root@2471dd89bbc1 /]# cd home
    [root@2471dd89bbc1 home]# ls
    [root@2471dd89bbc1 home]# touch flask-web.py
    需要用到vim,安装vim:
    [root@2471dd89bbc1 home]# yum install vim -y
    [root@2471dd89bbc1 home]# vim flask-web.py
from flask import Flask
app= Flask(__name__)

@app.route('/')
def index():
        return 'Flask Application!'

if __name__ == '__main__':
        app.run(host = '0.0.0.0',port = 5000)

运行这个脚本文件,检验是否有误:
[root@2471dd89bbc1 home]# python flask-web.py
1734883-20190707195114053-1108196799.jpg

  • 退出容器,产生容器记录
    [root@2471dd89bbc1 home]# exit
  • 提交容器记录构建镜像
    [root@instance-mtfsf05r ~]# docker commit 2471dd89bbc1 test/flask_web
    查看镜像:[root@instance-mtfsf05r ~]# docker image ls
  • 运行镜像产生容器
    使用:[root@instance-mtfsf05r ~]# docker run -d -p 7000:5000 test/flask_web是没有动作的,需要运行脚本,使容器持续运行:
    [root@instance-mtfsf05r ~]# docker run -d -p 7000:5000 test/flask_web python /home/flask-web.py
    “7000”是主机(我这里是云主机)端口,“5000”是Docker中容器中的应用端口。外部访问宿主主机“7000”端口也就是访问Docker中5000端口对应的Docker应用。
  • 访问容器中的应用
    在你的浏览器中输入:106.12.115.123:7000/(主机IP+端口号)就会访问到云主机中的Flask Web应用:
    1734883-20190707195223365-20057916.jpg

发布Docker镜像到Docke Hub公有仓库

  • 注册登录Docker Hub
    Docker Hub网址:https://hub.docker.com/
  • 修改tag
    博主的Daoker Hub账号是Thanlon,先查看将要发布的镜像:
    [root@instance-mtfsf05r ~]# docker images
    1734883-20190707195545582-878426498.jpg
    镜像名是:test/flask_web
    push到Daoker Hub的命令格式是:docker push 账号/仓库名,为了使镜像名与"账号/仓库名"对应,需要修改tag:
    [root@instance-mtfsf05r ~]# docker tag test/flask_web thanlon/flask-web
    其过程就是建立一个镜像的副本,并修改镜像名,可以再次查看镜像:
    [root@instance-mtfsf05r ~]# docker images
    1734883-20190707195629773-1652595860.jpg
    很明显镜像列表中增加了thanlon/flask-web的镜像。
  • push镜像到Docker Hub中
    [root@instance-mtfsf05r ~]# docker push thanlon/flask-web
    1734883-20190707195832589-1091391643.jpg
  • 查看Daoker Hub仓库
    1734883-20190707195840010-1057132509.jpg

Docker搭建私有仓库

  • 下载Docker私有仓库镜像
    [root@instance-mtfsf05r ~]# docker pull registry
  • 启动私有仓库容器实例
    [root@instance-mtfsf05r ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
    私有仓库会被创建在容器中的/var/lib/registry下,通过-v参数将镜像文件存储到本地的/opt/data/registry下,容器中的5000端口映射到宿主的5000端口。
  • 查看私有仓库的容器运行状态
    [root@instance-mtfsf05r ~]# docker ps
  • 修改本地镜像的tag
    修改本地镜像的tag,便于推送到本地镜像仓库:
    [root@instance-mtfsf05r ~]# docker tag registry 106.12.115.123:5000/registry
  • 测试容器的连接是否正常
    [root@instance-mtfsf05r ~]# telnet 106.12.115.136 5000
    1734883-20190707200155169-1385269677.jpg
  • 使Docker允许HTTPS方式push镜像
    通过Docker的配置选项来取消不允许非HTTPS方式推送镜像这个默认规则,修改配置文件/etc/docker/daemon.json
    [root@instance-mtfsf05r ~]# vim /etc/docker/daemon.json
    修改为:
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["106.12.115.136:500"]
}

修改Docker服务配置文件,写入以下内容:

EnvironmentFile=/etc/docker/daemon.json

1734883-20190707200241350-1998374608.jpg
注意要写入 [Serveice] 配置块中,加载配置文件(daemon.json)。

  • 重新加载docker
    [root@instance-mtfsf05r ~]# systemctl daemon-reload
  • 重启Docker服务
    [root@instance-mtfsf05r ~]# systemctl restart docker
  • 开启私有仓库的容器实例
    由于重启了Docker,所有容器镜像实例全部被关闭,所以需要开启私有仓库的容器实例。
    查看私有仓库的容器记录:
    [root@instance-mtfsf05r ~]# docker ps -a
    启动容器实例:
    [root@instance-mtfsf05r ~]# docker start 2522102623c2(2522102623c2是容器ID)
  • 推送本地镜像到私有仓库
    [root@instance-mtfsf05r ~]# docker push 106.12.115.123:5000/hello-world
  • 查看推送到私有仓库中的镜像
    http://106.12.115.123:5000/v2/
  • 从私有仓库中下载镜像
    [root@instance-mtfsf05r ~]# docker pull 106.12.115.136:5000/hello-world

转载于:https://www.cnblogs.com/maleleader/p/11147175.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值