设为首页 收藏本站
查看: 904|回复: 0

[经验分享] Docker基本操作

[复制链接]

尚未签到

发表于 2017-12-6 09:38:29 | 显示全部楼层 |阅读模式
Docker的安装和卸载
  Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:



[iyunv@xxx ~]# docker version
Client:
Version:      1.12.3
API version:  1.24
Go version:   go1.6.3
Git commit:   6b644ec
Built:
OS/Arch:      linux/amd64
Server:
Version:      1.12.3
API version:  1.24
Go version:   go1.6.3
Git commit:   6b644ec
Built:
OS/Arch:      linux/amd64


  查看Docker的帮助信息:# docker --help。各种命令的用法也不再赘述,后边用到哪些命令时会作出一定的解释。
  


Docker中关于镜像的基本操作
  安装完Docker引擎之后,就可以对镜像进行基本的操作了。
  我们从官方注册服务器(https://http://hub.docker.com)的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:



[iyunv@xxx ~]# docker search centos    # 查看centos镜像是否存在
[iyunv@xxx ~]# docker pull centos    # 利用pull命令获取镜像
Using default tag: latest
latest: Pulling from library/centos
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for centos:latest
[iyunv@xxx ~]# docker images    # 查看当前系统中的images信息
REPOSITORY      TAG            IMAGE ID       CREATED        SIZE
centos          latest         0584b3d2cf6d   9 days ago     196.5 MB

  以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。
  (1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本



[iyunv@xxx ~]# docker run -it centos:latest /bin/bash    # 启动一个容器
[iyunv@72f1a8a0e394 /]#    # 这里命令行形式变了,表示已经进入了一个新环境
[iyunv@72f1a8a0e394 /]# git --version    # 此时的容器中没有git
bash: git: command not found
[iyunv@72f1a8a0e394 /]# yum install git    # 利用yum安装git
......
[iyunv@72f1a8a0e394 /]# git --version   # 此时的容器中已经装有git了
git version 1.8.3.1

  此时利用exit退出该容器,然后查看docker中运行的程序(容器):



[iyunv@xxx ~]# docker ps -a
CONTAINER ID  IMAGE    COMMAND      CREATED   STATUS   PORTS    NAMES
72f1a8a0e394  centos:latest "/bin/bash"  9 minutes ago   Exited (0) 3 minutes ago      angry_hodgkin

  这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:



[iyunv@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git
[iyunv@xxx ~]# docker images
REPOSITORY       TAG    IMAGE ID         CREATED             SIZE
xianhu/centos    git    52166e4475ed     5 seconds ago       358.1 MB
centos           latest 0584b3d2cf6d     9 days ago          196.5 MB

  其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。
  此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。



[iyunv@xxx ~]# docker run -it xianhu/centos:git /bin/bash
[iyunv@520afc596c51 /]# git --version
git version 1.8.3.1

  利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。
  (2)利用Dockerfile创建镜像
  Dockerfile可以理解为一种配置文件,用来告诉docker build命令应该执行哪些操作。一个简易的Dockerfile文件如下所示,官方说明:Dockerfile reference:



# 说明该镜像以哪个镜像为基础
FROM centos:latest
# 构建者的基本信息
MAINTAINER xianhu
# 在build这个镜像时执行的操作
RUN yum update
RUN yum install -y git
# 拷贝本地文件到镜像中
COPY ./* /usr/share/gitdir/

  有了Dockerfile之后,就可以利用build命令构建镜像了:



[iyunv@xxx ~]# docker build -t="xianhu/centos:gitdir" .

  其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile。
  构建完成之后,同样可以使用docker images命令查看:



[iyunv@xxx ~]# docker images
REPOSITORY        TAG       IMAGE ID      CREATED            SIZE
xianhu/centos     gitdir    0749ecbca587  34 minutes ago     359.7 MB
xianhu/centos     git       52166e4475ed  About an hour ago  358.1 MB
centos            latest    0584b3d2cf6d  9 days ago         196.5 MB

  以上就是构建自己镜像的两种方法。其中也涉及到了容器的一些操作。如果想删除容器或者镜像,可以使用rm命令,注意:删除镜像前必须先删除以此镜像为基础的容器。



[iyunv@xxx ~]# docker rm container_name/container_id
[iyunv@xxx ~]# docker rmi image_name/image_id

  镜像其他操作指令:



[iyunv@xxx ~]# docker save -o centos.tar xianhu/centos:git    # 保存镜像
[iyunv@xxx ~]# docker load --input centos.tar    # 加载镜像


Docker中关于容器的基本操作
  在前边镜像的章节中,我们已经看到了如何基于镜像启动一个容器,即docker run操作。



[iyunv@xxx ~]# docker run -it centos:latest /bin/bash

  这里-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)。此时如果使用exit退出,则容器的状态处于Exit,而不是后台运行。如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl+p ctrl+q 退出,此时容器的状态为Up。
  除了这两个参数之外,run命令还有很多其他参数。其中比较有用的是-d后台运行:



[iyunv@xxx ~]# docker run centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"
[iyunv@xxx ~]# docker run -d centos:latest /bin/bash -c "while true; do echo hello; sleep 1; done"

  这里第二条命令使用了-d参数,使这个容器处于后台运行的状态,不会对当前终端产生任何输出,所有的stdout都输出到log,可以使用docker logs container_name/container_id查看。
  启动、停止、重启容器命令:



[iyunv@xxx ~]# docker start container_name/container_id
[iyunv@xxx ~]# docker stop container_name/container_id
[iyunv@xxx ~]# docker restart container_name/container_id

  后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:



[iyunv@xxx ~]# docker attach container_name/container_id

  删除容器的命令前边已经提到过了:



[iyunv@xxx ~]# docker rm container_name/container_id


Docker中关于仓库的基本操作
  Docker官方维护了一个DockerHub的公共仓库,里边包含有很多平时用的较多的镜像。除了从上边下载镜像之外,我们也可以将自己自定义的镜像发布(push)到DockerHub上。
  在镜像操作章节中,我们新建了一个xianhu/centos:git镜像。
  (1)访问https://http://hub.docker.com/,如果没有账号,需要先注册一个。
  (2)利用命令docker login登录DockerHub,输入用户名、密码即可登录成功:



[iyunv@xxx ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xianhu
Password:
Login Succeeded

  (3)将本地的镜像推送到DockerHub上,这里的xianhu要和登录时的username一致:



[iyunv@xxx ~]# docker push xianhu/centos:git    # 成功推送
[iyunv@xxx ~]# docker push xxx/centos:git    # 失败
The push refers to a repository [http://docker.io/xxx/centos]
unauthorized: authentication required

  (4)以后别人就可以从你的仓库中下载合适的镜像了。



[iyunv@xxx ~]# docker pull xianhu/centos:git

  对应于镜像的两种创建方法,镜像的更新也有两种:


  • 创建容器之后做更改,之后commit生成镜像,然后push到仓库中。
  • 更新Dockerfile。在工作时一般建议这种方式,更简洁明了。
  
这里再一次回顾一下三个重要的概念:镜像、容器、仓库:

从仓库(一般为DockerHub)下载(pull)一个镜像,Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker执行commit方法将一个容器转化为镜像。Docker利用login、push等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序了。

利用Docker创建一个用于Flask开发的Python环境
  上边已经解释和练习了Docker的基本操作命令,下边以实例的形式完整走一遍流程。
  我们创建一个用于Flask开发的Python环境,包含Git、Python3、Flask以及其他依赖包等。
  完整命令如下:



[iyunv@xxx ~]# docker pull centos
[iyunv@xxx ~]# docker run -it centos:latest /bin/bash
# 此时进入容器,安装Python3、Git、Flask及其依赖包等,安装完成后exit退出
[iyunv@xxx ~]# docker commit -m "Flask" -a "xianhu" container_id xianhu/flask:v1
[iyunv@xxx ~]# docker push xianhu/flask:v1

  Docker的功能和特性还有很多,各种运行命令、参数等也都有待学习和练习,比如如何管理数据、如何管理网络、如何互相配合工作、如何编写更专业的Dockerfile等。本文先入门为主,以后有时间再慢慢更新关于Docker的知识。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421077-1-1.html 上篇帖子: Docker为什么刚运行就退出了 下篇帖子: docker镜像上传到阿里云
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表