Docker需要安装在64位的x86平台或ARM平台上(如树莓派),并且要求内核版本不低于3.10。但实际上内核越新越好,过低的内核版本可能会出现部分功能无法使用,或者不稳定。 用户可以通过如下命令检查自己的内核版本详细信息:
[root@ps2 run]# uname -a
Linux ps2 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Docker的安装可以从Docker公司官网上取得安装包(https://www.docker.com/community-edition#/download),一键安装使用,也可以在不同操作系统上采用自动化安装工具进行安装,总体来说比较简单,下面列举两个操作系统在线安装的例子:
一、CentOS安装Docker
Redhat Linux系列包括Redhat Enterprise Linux、Fedora Core、CentOS,此处以CentOS7为例安装 Docker 。
root用户登录系统
关闭防火墙
[root@ps1 ~]# systemctl stopfirewalld.service
[root@ps1 ~]# systemctl disablefirewalld.service
更新yum源
[root@ps1 ~]# yum clean all
[root@ps1 ~]#yum update
添加yum源
[root@ps1 ~]# vi /etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enableid=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
安装docker引擎
[root@ps2~]# yum install docker-engine
已加载插件:fastestmirror,langpacks
...
已安装:
docker-engine.x86_64 0:17.05.0.ce-1.el7.centos
作为依赖被安装:
docker-engine-selinux.noarch:17.05.0.ce-1.el7.centos
完毕!
安装docker服务
[root@ps2 ~]# systemctl enabledocker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.serviceto /usr/lib/systemd/system/docker.service.
启动docker引擎
[root@ps1 ~]# systemctl startdocker
测试docker是否启动成功
[root@ps1 ~]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.05.0-ce
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan nulloverlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version:9048e5e50717ea4497b757314bad98ea3763c145
runc version:9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version:3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7(Core)
OSType: linux
Architecture: x86_64
CPUs: 12
Total Memory: 62.64GiB
Name: ps1
ID:ITPP:IAGG:RLRD:6POX:2FLP:OFVU:BL67:25UZ:THQK:GNZH:SB54:TLJA
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: bridge-nf-call-iptables isdisabled
WARNING: bridge-nf-call-ip6tablesis disabled
[root@ps2 ~]# vim /etc/sysctl.conf
添加:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
重启
docker info 警告消失
升级centos 7内核
以下情况需要升级内核:
1. 使用 docker 的overlay 网络 (kernel >= 3.16)。
2. 使用 overlayfs 作为 docker 镜像的存储文件系统( kernel >= 3.18)
[root@ps2~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
[root@ps2~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
获取http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
获取http://elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
准备中... #################################[100%]
正在升级/安装...
...
已安装:
kernel-lt.x86_640:4.4.127-1.el7.elrepo
完毕!
[root@ps2~]# grub2-set-default 0
[root@ps2~]# reboot
设置docker开机自启动
[root@ps1 ~]# systemctl enabledocker
二、Ubuntu安装Docker
2.1 安装前检查:
内核版本的检查
$ uname -r
存储驱动的检查
$ ls -l/sys/class/misc/device-mapper/
如果以上两个条件不满足,则需要升级内核版本
2.2 安装Ubuntu维护的版本
$ sudo apt-get install -y docker.io
$ source/etc/bash_completion.d/docker.io
$ docker -version
2.3安装Docker 维护的版本
1)检查APT的HTTPS支持情况
$vi usr/lib/apt/methods/https文件是否存在
$apt-get update
$apt-get install -y apt-transport-https
2)添加
3)添加仓库的key
4)安装
简单过程:
$ sudo apt-get install -y curl
$ curl -sSL https://get.docker.com/ubuntu/ sudo|sh
$ sudo docker version
$ sudo docker run ubuntu echo‘hello world’
三、Docker基本命令
3.1 镜像相关操作
对于镜像的操作就是操作image对象的,包括以下常用命令:
docker search #从镜像仓库搜索一个镜像
docker pull #从仓库中拉一个镜像
docker images #显示本地所有的镜像列表
dockerrmi #删除一个镜像,正在被使用的镜像不能被删除的
dockersave #将一个镜像保存为一个tar包,带layers和tag信息
$docker save nginx >/home/chen/chensuozhangdaochu.tar
dockerload #从一个tar包创建一个镜像,和save配合使用
$docker load >/home/chen/chensuozhangdaochu.tar
dockerhistory #显示生成一个镜像的历史命令,说明该镜像是怎么产生的
dockertag #为镜像起一个别名
dockerimport #从一个tar包创建一个镜像,往往和export结合使用
dockerbuild #使用Dockerfile创建镜像(推荐)
dockercommit #从容器创建镜像
3.2 容器的相关操作
对于容器的操作就是操作container的,包括以下常用命令:
docker create #创建一个容器但是不启动它
例子:$ docker create -i -t--name=create_by_chen hub.c.163.com/library/centos /bin/bash
docker run #创建并启动一个容器
docker stop #停止容器运行,发送信号SIGTERM
docker start #启动一个停止状态的容器
docker restart #重启一个容器
docker rm #删除一个容器
docker kill #发送信号给容器,默认SIGKILL
docker attach #连接(进入)到一个正在运行的容器
docker exec # Run a command in a runningcontainer 在已经运行的容器中运行一个命令,进入bash交互模式
docker wait #阻塞到一个容器,直到容器停止运行
docker ps #显示状态为运行(Up)的容器
docker ps -a #显示所有容器,包括运行中(Up)的和退出的(Exited)
docker inspect #深入容器内部获取容器所有信息,可以查看一个运行的和没有运行的容器,过滤(grep)看一下IP地址
docker logs #查看容器的日志(stdout/stderr)
docker events #得到docker服务器的实时的事件
docker port #显示容器的端口映射
docker top #显示容器的进程信息
docker diff #显示容器文件系统的前后变化
docker rename #重命名docker容器名
docker cp #从容器里向外拷贝文件或目录
示例:从宿主机到容器$ docker cp /root/123.shtest:/root/123.sh
示例:从容器到宿主机 $ docker cp
test:/root/123.sh /root/123.sh
docker export #将容器整个文件系统导出为一个tar包,不带layers、tag等信息
$ docker export 45d3e7388ccd > testchensuozhang.tar
注意:用户在哪个目录,导出的文件就在哪个目录,可以ls 看一下么 ,想导出导一个固定目录,加上目录就行了。如:$ docker export 45d3e7388ccd > /home/chen/testchensuozhang.tar
3.3 Dockerfile小例子
1)创建一个dockerfile文件
$ touch dockerfile
$ vi dockerfile
FROM hub.c.163.com/library/nginx
MAINTAINER chensuozhagn @qq.com
RUN echo "hello chen this is the first try by ChenSuozhang" >/usr/share/nginx/html/index.html
EXPOSE 80
#CMD 'nginx'
2)利用dockfile创建一个新镜像
$docker build -t web1.0:1.0 .
备注:这里的. 表示使用当前目录的dockerfile
3)检查是否创建了这个镜像
$ docker images
4)利用刚才创建的容器运行一个容器
$ docker run -it -p 8080:80 --name=chensuozhanggerenwangyef64d4b645d43 /bin/bash
5)运行一下nginx
$ root@5d317f7c19a9:/# nginx
6)浏览器访问nginx服务