部署Docker虚拟化平台内核要求:Linux内核版本:3.8+,推荐内核版本3.10+,对应的Linux发行版:RHEL7.x和CentOS7.x;
部署Docker虚拟化技术,对物理机配置容量没有要求,生产环境尽量使用高配物理机。如:京东线上,64C(CPU)+256G(内存)+2T(分布式部署),JDOS2.0弹性云。
部署环境:
OS:RedHat7.3
下载安装Docker软件包
[root@docker mnt]# yum install docker* 。。。 Installing: docker-engine x86_64 1.13.1-1.el7.centos /docker-engine-1.13.1-1.el7.centos.x86_64 65 M docker-engine-selinux noarch 1.13.1-1.el7.centos /docker-engine-selinux-1.13.1-1.el7.centos.noarch 43 k Installing for dependencies: audit-libs-python x86_64 2.6.5-3.el7 rhel7.3 70 k checkpolicy x86_64 2.5-4.el7 rhel7.3 290 k libcgroup x86_64 0.41-11.el7 rhel7.3 65 k libseccomp x86_64 2.3.1-2.el7 rhel7.3 56 k libsemanage-python x86_64 2.5-4.el7 rhel7.3 103 k libtool-ltdl x86_64 2.4.2-21.el7_2 rhel7.3 49 k policycoreutils-python x86_64 2.5-8.el7 rhel7.3 444 k python-IPy noarch 0.75-6.el7 rhel7.3 32 k setools-libs x86_64 3.3.8-1.1.el7 rhel7.3 610 k 。。。 [root@docker mnt]# rpm -qa | grep docker docker-engine-1.13.1-1.el7.centos.x86_64 docker-engine-selinux-1.13.1-1.el7.centos.noarch
启动Docker
[root@docker mnt]# systemctl start docker [root@docker mnt]# ps -ax | grep docker 11435 ? Ssl 0:00 /usr/bin/dockerd 11438 ? Ssl 0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc 11544 pts/0 R+ 0:00 grep --color=auto docker [root@docker mnt]# docker version Client: Version: 1.13.1 API version: 1.26 Go version: go1.7.5 Git commit: 092cba3 Built: Wed Feb 8 06:38:28 2017 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Go version: go1.7.5 Git commit: 092cba3 Built: Wed Feb 8 06:38:28 2017 OS/Arch: linux/amd64 Experimental: false
基于Docker引擎启动Nginx容器,并且实现通过物理机wget、curl实现访问
首先,需要从Docker官网获取Docker镜像,docker search nginx | more
docker search nginx | more docker pull docker.io/nginx
由于国外网站下载速度比较慢,所以可以替换为国内的docker仓库,具体方法:
[root@docker ~]# cat >/etc/docker/daemon.json << EOF { "registry-mirrors": ["https://registry.docker-cn.com"] } EOF [root@docker ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] } 重启Docker服务,这样就可以取下载Docker镜像了
为什么要为Docker配置国内镜像???在正常情况下,docker有一个默认连接的国外官方镜像,在国外的网友访问该官方镜像自然不成问题,但是国内毕竟不是国外,由于国情不同,中国的网络访问国外官方镜像网速一向很慢,而且往往还会遭遇断网的窘境,所以说我们要想正常使用docker的镜像,那么我们就不得不配置相应的国内镜像。
Docker可以配置的国内镜像有很多可供选择,比如说:阿里云,网易蜂巢,DaoCloud,Docker中国区官方镜像等,这些都是可以提供给大家随意选择的不错的镜像仓库。
将本地tar包载入到本地镜像库使用docker load命令
[root@localhost packages]# docker load --input ubuntu.tar 454970bd163b: Loading layer [==================================================>] 196.8 MB/196.8 MB 38112156678d: Loading layer [==================================================>] 208.9 kB/208.9 kB 4e1f7c524148: Loading layer [==================================================>] 4.608 kB/4.608 kB 56063ad57855: Loading layer [==================================================>] 1.024 kB/1.024 kB [root@localhost packages]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 07c86167cdc4 2 years ago 188 MB
启动容器:
docker run IMAGE COMMAND ARG...
run 在新容器中执行命令
IMAGE 指定的镜像
COMMAND 命令
ARG 参数
[root@localhost packages]# docker run ubuntu echo "hello world" hello world
一次启动执行一个命令的容器是docker中最基本的运行方式,docker提供了一个交互式启动容器的方式
docker run -i -t IMAGE /bin/bash
-i 为容器始终打开标准输入
-t 为创建的容器的tty终端
[root@localhost packages]# docker run -it ubuntu /bin/bash root@855833c3672f:/# echo "hello docker" hello docker root@855833c3672f:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
查看容器:
docker ps -a [ -l ]
-a 列出所有容器
-l 列出最新创建的容器
[root@localhost packages]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 855833c3672f ubuntu "/bin/bash" 45 seconds ago Exited (0) 10 seconds ago flamboyant_rosalind 797239db86e0 ubuntu "echo 'hello world'" About a minute ago Exited (0) About a minute ago flamboyant_khorana 77b29f9efa08 b809f199bbb9 "/bin/bash" 6 minutes ago Created stoic_leavitt
执行结果参数:
[root@localhost packages]# docker ps -a CONTAINER ID(docker守护进程在启动容器时为容器分配的唯一ID) IMAGE() 来自的镜像 COMMAND() 执行的命令 CREATED() 创建时间 STATUS() 运行状态 PORTS() 最近一次启动时间 NAMES(docekr守护进程为容器自动分配的名字)
docker inspect查看容器后面添加容器的唯一ID或者NAMES
docker自定义容器名字
docker run --name=vector_name -i -t ubuntu /bin/bash
[root@localhost packages]# docker run --name=fsx_docker -it ubuntu /bin/bash root@304d46ba1c87:/# exit exit [root@localhost packages]# docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 304d46ba1c87 ubuntu "/bin/bash" 11 seconds ago Exited (0) 7 seconds ago fsx_docker
重新启动已经停止的容器
docker start [-i] vector_name
-i 以交互模式启动
删除容器
docker rm CONTAINER_NAME
rm命令仅仅用来删除的容器,不能删除正在用运行的命令
[root@localhost packages]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 304d46ba1c87 ubuntu "/bin/bash" 2 minutes ago Up 39 seconds fsx_docker 855833c3672f ubuntu "/bin/bash" 5 minutes ago Exited (0) 4 minutes ago flamboyant_rosalind 797239db86e0 ubuntu "echo 'hello world'" 5 minutes ago Exited (0) 5 minutes ago flamboyant_khorana 77b29f9efa08 b809f199bbb9 "/bin/bash" 10 minutes ago Created stoic_leavitt [root@localhost packages]# docker rm 855833c3672f 855833c3672f [root@localhost packages]# docker rm 797239db86e0 797239db86e0 [root@localhost packages]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 304d46ba1c87 ubuntu "/bin/bash" 3 minutes ago Up About a minute fsx_docker 77b29f9efa08 b809f199bbb9 "/bin/bash" 11 minutes ago Created stoic_leavitt
总结
docker load --input 将本地容器仓库的tar包导入成镜像
docker run -it --name 启动一个新的容器
docker ps -a -l 查看容器
docker inspect 查看具体容器的信息
docker start -i 启动已经存在的容器
docker rm 删除一个容器
我们需要一个长期运行的容器提供服务,这就是守护式容器;可以长期运行
docker run -it IMAGE /bin/bash
ctrl+p ctrl+q
[root@localhost packages]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@localhost packages]# docker run -it --name=fsx1 ubuntu /bin/bash root@dcbb80e0404b:/# [root@localhost packages]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dcbb80e0404b ubuntu "/bin/bash" 26 seconds ago Up 25 seconds fsx1 //注意:此时的容器仍是启动状态,就意味着它还在运行
再次进入已经退出(仍在启动中)的容器:我们称之为:(附加到运行中的容器)
docker attach docker_name
[root@localhost packages]# docker attach fsx1 root@dcbb80e0404b:/#
启动守护式容器
docker run -d IMAGE COMMAND ARG...
-d 在启动容器时,使用后台
这是启动守护式容器最重要的命令
[root@localhost packages]# docker run --name=fsx2 -d ubuntu /bin/bash -c "while true;do echo hello;sleep 1;done" 529cea9c4075854083e1d025f5639055a8cde98d17fe4d6d74a208215d706427 [root@localhost packages]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 529cea9c4075 ubuntu "/bin/bash -c 'whi..." 5 seconds ago Up 3 seconds fsx2 //容器一直在运行
使用log命令查看容器内部运行状况
docker logs -f -t --tail vector_name
-f 一直跟踪logs,时时更新
-t 在返回结果上加上时间戳
--tail 返回结尾出多少书量的日志,不指定返回全部
[root@localhost packages]# docker logs -f -t --tail 5 fsx2 2018-05-24T03:35:35.642795622Z hello 2018-05-24T03:35:36.643727589Z hello 2018-05-24T03:35:37.644724326Z hello 2018-05-24T03:35:38.645707632Z hello 2018-05-24T03:35:39.646708718Z hello 2018-05-24T03:35:40.647727168Z hello 2018-05-24T03:35:41.648612161Z hello 2018-05-24T03:35:42.649668735Z hello ^C
查看容器内部进程
docker top vector_name
[root@localhost packages]# docker top fsx2 UID PID PPID C STIME TTY TIME CMD root 11775 11758 0 11:32 ? 00:00:00 /bin/bash -c while true;do echo hello;sleep 1;done root 13142 11775 0 11:37 ? 00:00:00 sleep 1
在docker运行中的容器启动新的进程(docker的理念是一个容器运行一个服务):
docker exec -d -i -t vector_name COMMAND ARG...
与run命令相似
[root@localhost packages]# docker exec -it fsx2 /bin/bash root@529cea9c4075:/# echo hello fsx hello fsx root@529cea9c4075:/# [root@localhost packages]# docker top fsx2 UID PID PPID C STIME TTY TIME CMD root 11775 11758 0 11:32 ? 00:00:00 /bin/bash -c while true;do echo hello;sleep 1;done root 13440 13423 0 11:40 pts/5 00:00:00 /bin/bash root 13475 11775 0 11:40 ? 00:00:00 sleep 1 //这里使用ctrl+p ctrl+q
停止守护式容器
docker stop vector_name
docker kill vector_name
stop是发送一个信号给容器,等待停止
kill直接停止容器
[root@localhost packages]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 529cea9c4075 ubuntu "/bin/bash -c 'whi..." 9 minutes ago Up 9 minutes fsx2 dcbb80e0404b ubuntu "/bin/bash" 18 minutes ago Up 18 minutes fsx1 [root@localhost packages]# docker stop fsx1 fsx1 [root@localhost packages]# docker kill fsx2 fsx2
ctrl+p ctrl+q 将交互式容器转到后台
docker run -d 创建一个守护式容器
docker logs 查看容器日志
docker top 查看容器内部进程
docker exec 为运行中的容器启动一个新进程
docker stop/kill 停止一个容器
这里只介绍一些常见的docker命令,及子命令使用;更多信息可以使用docker帮助文件
man docker-run(logs、stop、exec...)