Docker是什么Docker的安装和卸载Docker中关于镜像的基本操作

Docker是什么?


Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。


Docker官方文档比较全,建议有能力的读一下官方文档。


Docker的三个概念


1、镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。


2、容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。


3、仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。


Docker的安装和卸载


Docker可以安装在Windows、Linux、Mac等各个平台上。具体可以查看文档Install Docker。安装完成之后,可以查看Docker的版本信息:



[root@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://hub.docker.com)的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:



[root@xxx ~]# docker search centos # 查看centos镜像是否存在


[root@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


[root@xxx ~]# docker images # 查看当前系统中的images信息


REPOSITORY TAG IMAGE ID CREATED SIZE


centos latest 0584b3d2cf6d 9 days ago 196.5 MB



以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。


(1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本



[root@xxx ~]# docker run -it centos:latest /bin/bash # 启动一个容器


[root@72f1a8a0e394 /]# # 这里命令行形式变了,表示已经进入了一个新环境


[root@72f1a8a0e394 /]# git --version # 此时的容器中没有git


bash: git: command not found


[root@72f1a8a0e394 /]# yum install git # 利用yum安装git


......


[root@72f1a8a0e394 /]# git --version # 此时的容器中已经装有git了


git version 1.8.3.1



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



[root@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查看:



[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git


[root@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了。



[root@xxx ~]# docker run -it xianhu/centos:git /bin/bash


[root@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命令构建镜像了:



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



其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile。


构建完成之后,同样可以使用docker images命令查看:



[root@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命令,注意:删除镜像前必须先删除以此镜像为基础的容器。



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


[root@xxx ~]# docker rmi image_name/image_id



镜像其他操作指令:



[root@xxx ~]# docker save -o centos.tar xianhu/centos:git # 保存镜像, -o也可以是--output


[root@xxx ~]# docker load -i centos.tar # 加载镜像, -i也可以是--input



Docker中关于容器的基本操作


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



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



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


除了这两个参数之外,run命令还有很多其他参数。其中比较有用的是-d后台运行:



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


[root@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查看。


启动、停止、重启容器命令:



[root@xxx ~]# docker start container_name/container_id


[root@xxx ~]# docker stop container_name/container_id


[root@xxx ~]# docker restart container_name/container_id



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



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



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



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



Docker中关于仓库的基本操作


Docker官方维护了一个DockerHub的公共仓库,里边包含有很多平时用的较多的镜像。除了从上边下载镜像之外,我们也可以将自己自定义的镜像发布(push)到DockerHub上。


在镜像操作章节中,我们新建了一个xianhu/centos:git镜像。


(1)访问https://hub.docker.com/,如果没有账号,需要先注册一个。


(2)利用命令docker login登录DockerHub,输入用户名、密码即可登录成功:



[root@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一致:



[root@xxx ~]# docker push xianhu/centos:git # 成功推送


[root@xxx ~]# docker push xxx/centos:git # 失败


The push refers to a repository [docker.io/xxx/centos]


unauthorized: authentication required



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



[root@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以及其他依赖包等。


完整命令如下:



[root@xxx ~]# docker pull centos


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


-# 此时进入容器,安装Python3、Git、Flask及其依赖包等,安装完成后exit退出


[root@xxx ~]# docker commit -m "Flask" -a "xianhu" container_id xianhu/flask:v1


[root@xxx ~]# docker push xianhu/flask:v1



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



  • docker浠涔鎰忔
    绛旓細Docker鏄竴绉嶅紑婧愮殑瀹瑰櫒鍖栨妧鏈锛岄氳繃灏嗗簲鐢ㄧ▼搴忓強鍏朵緷璧栭」鎵撳寘鍦ㄥ鍣ㄤ腑锛屼娇搴旂敤绋嬪簭鑳藉鍦ㄥ悇绉嶄笉鍚岀殑鐜涓繍琛岋紝鎻愪緵浜嗕竴绉嶅揩閫熴佷究鎹枫侀珮鏁堢殑搴旂敤绋嬪簭閮ㄧ讲鏂瑰紡鍜岀鐞嗘柟寮忋侱ocker灏嗗簲鐢ㄧ▼搴忓拰鍏朵緷璧栭」鎵撳寘鍦ㄥ鍣ㄤ腑锛屽叾涓寘鎷繍琛屾椂鐜銆佸簱鍜岄厤缃紝浣垮緱搴旂敤绋嬪簭鑳藉鍦ㄤ换浣曞湴鏂逛互鐩稿悓鐨勬柟寮忚繍琛屻傝繖绉嶅鍣ㄥ寲鎶...
  • docker鏄粈涔
    绛旓細docker鏄簲鐢ㄥ鍣ㄥ紩鎿銆侱ocker鏄竴涓紑婧愮殑搴旂敤瀹瑰櫒寮曟搸锛屽彲浠ュ皢搴旂敤鍙婂叾渚濊禆鎵撳寘鍒颁竴涓彲绉绘鐨勯暅鍍忎腑锛屽苟鍙戝竷鍒颁换浣曟祦琛岀殑鎿嶄綔绯荤粺鐨勬満鍣ㄤ笂銆侱ocker瀹瑰櫒鏄竴绉嶆墦鍖呮牸寮忥紝鍏朵腑鍖呭惈搴旂敤杩愯鎵闇鐨勪竴鍒囪绱狅紝鍖呮嫭搴撱佺郴缁熷伐鍏枫佷唬鐮佸拰杩愯鏃躲Docker杩樻槸涓涓蒋浠跺钩鍙锛屾敮鎸佸紑鍙戜汉鍛樺揩閫熸瀯寤恒佹祴璇曞拰閮ㄧ讲瀹瑰櫒鍖栧簲鐢...
  • Docker鏄粈涔圖ocker鐨勫畨瑁呭拰鍗歌浇Docker涓叧浜庨暅鍍忕殑鍩烘湰鎿嶄綔
    绛旓細[root@xxx ~]# docker save -o centos.tar xianhu/centos:git # 淇濆瓨闀滃儚, -o涔熷彲浠ユ槸--output [root@xxx ~]# docker load -i centos.tar # 鍔犺浇闀滃儚, -i涔熷彲浠ユ槸--input Docker涓叧浜庡鍣ㄧ殑鍩烘湰鎿嶄綔 鍦ㄥ墠杈归暅鍍忕殑绔犺妭涓,鎴戜滑宸茬粡鐪嬪埌浜嗗浣曞熀浜庨暅鍍忓惎鍔ㄤ竴涓鍣,鍗砫ocker run鎿嶄綔銆 [root@xxx ~]#...
  • 浠涔堟槸Docker
    绛旓細Docker鏄竴绉嶈交閲忕骇鐨勮櫄鎷熷寲鎶鏈锛屽悓鏃舵槸涓涓紑婧愮殑搴旂敤瀹瑰櫒杩愯鐜鎼缓骞冲彴锛屽彲浠ヨ寮鍙戣呬互渚挎嵎鏂瑰紡鎵撳寘搴旂敤鍒颁竴涓彲绉绘鐨勫鍣ㄤ腑锛岀劧鍚庡畨瑁呰嚦浠讳綍杩愯Linux鎴朩indows绛夌郴缁熺殑鏈嶅姟鍣ㄤ笂銆傜浉杈冧簬浼犵粺铏氭嫙鏈猴紝Docker瀹瑰櫒鎻愪緵杞婚噺鍖栫殑铏氭嫙鍖栨柟寮忋佸畨瑁呬究鎹枫佸惎鍋滈熷害蹇備负浠涔堥渶瑕丏ocker瀹瑰櫒 瀹瑰櫒锛屽氨鏄竴涓交...
  • 浠涔堟槸Docker
    绛旓細Docker鏄竴涓紑婧愮殑搴旂敤瀹瑰櫒寮曟搸锛屽畠鍩轰簬Go璇█寮鍙戯紝骞堕伒浠嶢pache2.0寮婧愬崗璁備娇鐢―ocker鍙互璁╁紑鍙戣呭皝瑁呬粬浠殑搴旂敤浠ュ強渚濊禆鍖呭埌涓涓彲绉绘鐨勫鍣ㄤ腑锛岀劧鍚庡彂甯冨埌浠绘剰Linux鏈哄櫒涓婏紝涔熷彲浠ュ疄鐜拌櫄鎷熷寲銆侱ocker瀹瑰櫒瀹屽叏浣跨敤娌欑鏈哄埗锛岀浉浜掍箣闂翠笉浼氭湁浠讳綍鎺ュ彛锛岃繖淇濊瘉浜嗗鍣ㄤ箣闂寸殑瀹夊叏鎬с侱ocker璇炵敓浜2013骞村垵锛...
  • docker鏄粈涔鎰忔
    绛旓細Docker鏄竴涓紑婧愮殑搴旂敤瀹瑰櫒寮曟搸锛岃寮鍙戣呭彲浠ユ墦鍖呬粬浠殑搴旂敤浠ュ強渚濊禆鍖呭埌涓涓彲绉绘鐨勯暅鍍忎腑锛岀劧鍚庡彂甯冨埌浠讳綍娴佽鐨凩inux鎴朩indows鏈哄櫒涓婏紝涔熷彲浠ュ疄鐜拌櫄鎷熷寲銆傚鍣ㄦ槸瀹屽叏浣跨敤娌欑鏈哄埗锛岀浉浜掍箣闂翠笉浼氭湁浠讳綍鎺ュ彛銆傝嫳璇璂ocker鐨勬剰鎬濇槸锛氬鍣紱瀹瑰櫒鎶鏈;鎶鏈紱鐮佸ご宸ヤ汉锛涜埞鍧炲伐浜恒傚弻璇緥鍙 Some people turn up ...
  • docker鏄骞浠涔鐨
    绛旓細docker鏄涓涓紑婧愮殑搴旂敤瀹瑰櫒寮曟搸銆傝寮鍙戣呭彲浠ユ墦鍖呬粬浠殑搴旂敤浠ュ強渚濊禆鍖呭埌涓涓彲绉绘鐨勫鍣ㄤ腑锛岀劧鍚庡彂甯冨埌浠讳綍娴佽鐨凩inux鏈哄櫒涓婏紝涔熷彲浠ュ疄鐜拌櫄鎷熷寲锛屽鍣ㄦ槸瀹屽叏浣跨敤娌欑鏈哄埗锛岀浉浜掍箣闂翠笉浼氭湁浠讳綍鎺ュ彛銆備紬鎵鍛ㄧ煡锛屼竴涓狫ava搴旂敤war鍖呮垨鑰卝ar鍖呭惎鍔ㄦ垚鍔燂紝鏈夎兘澶熷澶栨彁渚涙湇鍔$殑鑳藉姏锛岃兘姝e父璁块棶椤甸潰锛屽仛鎿嶄綔锛...
  • docker瀹瑰櫒鐨勫熀鏈蹇?
    绛旓細1.Docker 鏄涓涓紑婧愮殑搴旂敤瀹瑰櫒寮曟搸锛屽熀浜 Go 璇█ 骞堕伒浠 Apache2.0 鍗忚寮婧愩侱ocker 鍙互璁╁紑鍙戣呮墦鍖呬粬浠殑搴旂敤浠ュ強渚濊禆鍖呭埌涓涓交閲忕骇銆佸彲绉绘鐨勫鍣ㄤ腑锛岀劧鍚庡彂甯冨埌浠讳綍娴佽鐨 Linux 鏈哄櫒涓婏紝涔熷彲浠ュ疄鐜拌櫄鎷熷寲銆傚鍣ㄦ槸瀹屽叏浣跨敤娌欑鏈哄埗锛岀浉浜掍箣闂翠笉浼氭湁浠讳綍鎺ュ彛锛堢被浼 iPhone 鐨 app锛,鏇撮噸瑕佺殑鏄...
  • Docker鏄粈涔
    绛旓細Docker 鏄涓涓紑婧愮殑瀹瑰櫒鍖栬蒋浠讹紝瀹冨厑璁哥敤鎴峰湪铏氭嫙瀹瑰櫒涓繍琛屽簲鐢ㄧ▼搴忋備笅闈㈡槸涓浜涘父鐢ㄧ殑 Docker 鍛戒护锛docker pull锛氫粠 Docker Hub 涓嬭浇闀滃儚銆俤ocker run锛氳繍琛屼竴涓鍣ㄣ俤ocker ps锛氭煡鐪嬪綋鍓嶆鍦ㄨ繍琛岀殑瀹瑰櫒銆俤ocker images锛氭煡鐪嬫湰鍦颁富鏈轰笂鐨勯暅鍍忋俤ocker stop锛氬仠姝竴涓鍦ㄨ繍琛岀殑瀹瑰櫒銆俤ocker rm锛氬垹闄や竴...
  • Docker鏄粈涔?
    绛旓細Docker鏄涓栫晫棰嗗厛鐨勮蒋浠跺鍣ㄥ钩鍙般侱ocker浣跨敤Google鍏徃鎺ㄥ嚭鐨凣o璇█杩涜寮鍙戝疄鐜帮紝鍩轰簬Linux鍐呮牳鐨刢group锛宯amespace锛屼互鍙夾UFS绫荤殑UnionFS绛夋妧鏈紝瀵硅繘绋嬭繘琛屽皝瑁呴殧绂伙紝灞炰簬鎿嶄綔绯荤粺灞傞潰鐨勮櫄鎷熷寲鎶鏈 鐢变簬闅旂鐨勮繘绋嬬嫭绔嬩簬瀹夸富鍜屽叾瀹冪殑闅旂鐨勮繘绋嬶紝鍥犳涔熺О鍏朵负瀹瑰櫒锛屼絾docker鏈韩骞朵笉鏄鍣紝瀹冩槸鍒涘缓瀹瑰櫒鐨...
  • 扩展阅读:docker compose ... github官网进入 ... github免费入口 ... docker hub官网 ... github资源网站 ... docker 集群实战 ... docker官方网站 ... 为什么docker被淘汰了 ... nas上docker推荐 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网