- Docker安装:(Centos 6.x)
- [root@localhost ~]# yum install epel-release
- [root@localhost ~]# yum install docker-io
- [root@localhost ~]# service docker start
- [root@localhost ~]# docker version //输入docker version 验证安装是否成功
-
-
- Docker安装:(Centos 7.x
- 最新版的Docker需要64位CentOS 7系统,并且分社区版(CE)和企业版(EE),一般选择免费的社区版即可
-
- 1.卸载旧版本(如果安装了的话)
- [root@localhost ~]# yum remove docker docker-common docker-selinux docker-engine
- 2.安装
- ->最简单的安装方式是直接 yum install:
- [root@localhost ~]# yum install docker
-
- ->如果想要安装最新的稳定版,可以使用下面的安装方式:
- [root@localhost software]# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm
- [root@localhost software]# ls
- docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm
- [root@localhost software]# yum install docker-ce-17.06.2.ce-1.el7.centos.x86_64.rpm
-
- [root@localhost software]# systemctl start docker
- [root@localhost software]# ps -aux | grep docker
- 可以看到Docker在后台启动了两个守护进程:dockerd 和 docker-containerd
-
Docker的三个基本概念:镜像、容器、仓库
- 镜像(image):镜像相当于创建容器的一个模具,一个说明书,
- 容器(container):而容器就是一个实实在在运行的镜像实例,可以用可执行文件和进程来比喻镜像和容器的关系,
- 仓库(registry):而仓库就是用来存放镜像的,相当于git仓库,用来存放不同版本的镜像。
-
1、镜像(可以将镜像比作面向对象的类 Class)
- Docker想要启动一个容器,则必须要先有一个镜像,镜像是创建容器的模板和源程序,
- docker对镜像的管理灵感很大程度来源于git,比如镜像也有pull和push操作。
- 如同github上托管了数以万计的项目一样,Docker的官方镜像库Docker Hub(https://hub.docker.com/)
- 上也托管了几十万个公开的镜像供我们下载使用,可以说正是由于镜像的存在才让我们的Docker变得如此流行。
-
2、容器(可以将容器比作面向对象的实例 new Class())
- 容器(Container)是Docker中最重要的概念之一,他是镜像的运行实体,是一个应用运行和所需运行环境的结合体。
- 从现在开始,忘掉“臃肿”的虚拟机吧,对容器进行操作就跟直接操作应用一样简单、快速。
-
3、仓库(可以将仓库比作面向对象中的堆内存,用来存放镜像【class】的地方)
- 仓库(Repository)是Docker另一个重要的概念,是集中存放镜像的地方。
- 由于Docker中的镜像管理的灵感很大程度来源于Git,所以可以对比Git仓库来理解Docker仓库。
-
- 如同一个Git仓库含有多次提交和多个项目版本,一个Docker仓库也可以有多个版本的镜像。
-
- ###################################镜像相关命令###########################################
- 1、docker search(搜索镜像,默认从官方镜像库hub.docker.com搜索)
- [root@localhost ~]# docker search nginx
- //-s 参数可以指定只搜索镜像最少获得的star数
-
- 2、docker pull(将镜像下载到本地)
- [root@localhost software]# docker pull nginx
- //由于最新的镜像可能并不稳定,所以我们在pull镜像时往往要加上特定的TAG来下载指定的版本
- //docker pull mysql:5.6.37
-
- 3、docker images(列出本地镜像)
- [root@localhost software]# docker images
-
- 4、docker inspect imageID/ContainerID(列出某个镜像/容器的详细信息,返回的是一个json格式文本)
- [root@localhost software]# docker inspect imageID
-
- 5、docker history imageID(列出镜像各层的创建过程)
- [root@localhost software]# docker history imageID
-
- 6、docker tag(给镜像打标签,相当于给本地的镜像重新起了个别名,方便我们操作)
- [root@localhost software]#docker tag mysql:5.6.37 hellomysql:0.0.1
- //给mysql起一个别名hellomysql
- //虽然上面分别列出了mysql和 hellomysql,但是它们的镜像ID是一样的,并且目前它们指向的是同一个镜像文件,
- //镜像文件并不是重新被复制了一份,你可以对比 git中的新建分支操作。
-
- 7、docker rmi(删除镜像)
- [root@localhost ~]# docker rmi 036477bc0d5a
- ##############################################################################
-
- ###################################容器相关命令###########################################
- 1、docker create(创建一个容器)
- [root@localhost ~]#docker create -it centos:v7.0 "/bin/bash"
- //-i 参数 保持标准输入打开,默认为false
- //-t 参数 用来分配一个伪终端并绑定到容器的标准输入上,-i 和 -t 通常配合使用,让我们可以在容器中执行shell命令
-
- 2、docker ps(列出当前正在运行的容器)
- [root@localhost software]# docker ps
- //可以看到上面docker ps的信息没有显示全,有的被截断了 可以在命令加上 --no-trunc 参数强制完全显示
- //-a 参数会列出所有的容器,包括已停止的
- //-q 只列出容器的id
- //从上面的结果也可以看出,docker create 命令只是创建了一个容器并没有启动它
-
- 3、docker run( 创建并启动一个容器)
- //当然创建和启动容器也可以一步完成,使用docker run 命令,该命令相当于docker create + docker start命令
- //docker run 命令支持的参数和docker create 基本一致。
- [root@localhost software]# docker run -d -p 8080:80 nginx
- //启动一个容器,并把容器中的80端口映射到宿主机的8080端口 -d表示让容器在后台运行
- //docker run命令的执行步骤大致如下:
- (1)检查本地是否存在指定的镜像,不存在就从公有仓库下载;
- (2)利用镜像创建一个容器,并启动该容器;
- (3)分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
- (4)从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
- (5)从网桥的地址池配置一个IP地址给容器;
- (6)执行用户指定的应用程序;
- (7)执行完毕后容器被自动终止。
- //[root@localhost go]# docker run centos:v7.0 /bin/echo "hello world"
- //上面的命令创建了一个centos容器,启动并执行COMMAND: /bin/echo "hello world"
- //命令执行完之后结束运行,可以用docker ps -a 命令查看到一个处于停止状态的容器
- //docker run 命令如果没有指定COMMAND,则会用镜像指定的默认COMMAND,如果镜像也没有指定COMMAND,则会抛出错误。
- //--name指定容器名称,默认是自己生成的,注意--name时不能重复
- //-it 以交互模式运行容器,为容器重新分配一个伪输入终端。
- //-d 后台运行容器,并返回容器ID
- //-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-
- 4、docker logs
- //对于运行在后台的容器(使用 docker run -d),容器的标准输出会被重定向写入相应的日志文件中,
- //这时如果我们想要看这个容器的标准输出,可以使用 docker logs 命令
- //比如现在在我的容器中有一个shell脚本 /usr/local/bin/hello.sh 内容如下
- //[root@localhost ~]# docker run -d centos:hello-docker /bin/sh /usr/local/bin/hello.sh
- //e2fa608635bddaca537a2a850f6d25259f6f54f98428be6a0fc96a771ad478f6
- //就是每隔两秒打印一句 hello docker,现在我们后台启动这个容器,然后用 docker logs 命令查看输出
- //[root@localhost ~]# docker logs -f e2f
-
- 5、docker start/stop(开始/停止容器运行)
- [root@localhost software]# docker start 9af52c8b4dab
- [root@localhost software]# docker stop 9af52c8b4dab
-
- 6、docker exec(docker attach ContainerID)
- //对于容器来说,通常我们都是让其在后台运行,比如对于nginx来说,我们通常这样启动容器
- //[root@localhost ~]# docker run -d -p 8080:80 nginx:latest nginx -g 'daemon off;'
- //b0a3266aaf05a9b7b5a7d910716c37a32330f0a5f9a34481679619c7217b5bb9
- //[root@localhost ~]# curl '127.0.0.1:8080'
- //-d 参数以守护进程方式运行容器 -p 参数可以将容器的端口映射到宿主机的指定端口
- //我们知道,一个容器通常只能运行一个COMMAND,这时如果我还想在容器中执行其他命令该怎么办呢,
- //比如在nginx容器中运行bash,docker exec命令可以实现该功能
- //[root@localhost ~]# docker exec -it b0a /bin/bash
- //root@b0a3266aaf05:/# cd /etc/
- //root@b0a3266aaf05:/etc# cat nginx/nginx.conf
- //上面我们进入到容器中,查看了nginx的配置文件然后退出,整个过程没有影响到容器的运行。
-
- 7、docker rm(删除容器)
- [root@localhost ~]# docker rm 724db6813f51
- // 可以加 -f 参数,这样docker会先尝试终止容器运行,然后再删除容器
-
- 8、docker commit
- //当我们在一个容器中做了一些更改之后,想要保存这些更改方便以后使用,我们可以使用 docker commit 提交更改,
- //这样会在本地生成一个新的镜像,这个镜像保存了你之前所做的所有修改。
- 以Nginx镜像为例,在容器中创建一个文件,然后 docker commit:
- [root@localhost sshd_ubuntu]# docker run -d -p 8080:80 nginx:latest
- ffa8237fe81a34e13c0ef7c13ec0dd52775fee0e2e9f377e6924929ac4eb7915
- [root@localhost sshd_ubuntu]# docker exec -it ffa /bin/bash
- root@ffa8237fe81a:/# echo "Hello,docker!" > /usr/share/nginx/html/test.html
- root@ffa8237fe81a:/# ls /usr/share/nginx/html/test.html
- /usr/share/nginx/html/test.html
- root@ffa8237fe81a:/# exit
- root@localhost sshd_ubuntu]# curl '127.0.0.1:8080/test.html'
- Hello,docker!
- [root@localhost sshd_ubuntu]# docker commit -m "创建test.html" ffa nginx:myself
- ffbf82fc975d8804bdd0f219e038be0c4f788303938671ae1db61be9bb6703e0
- //这样就把我们刚刚的修改提交生成了一个新镜像 nginx:myself
-
- 9、docker export/import
- 有时我们需要将一个容器迁移到另一个容器上,这时我们使用docker提供的导入导出命令(docker import/export)
- 就可以很方便的将容器导出成备份文件,然后再从备份文件导入成镜像。
-
- 10、dock cp(拷贝文件)
- ##############################################################################