Centos7安装Docker
查看Linux内核版本
uname -r 3.10.0-693.11.1.el7.x86_64
Docker ce支持64位版本Centos7,并且要求内核版本不低于3.10
如果之前有安装过Docker ce的,可以移出之前的旧版本,使用以下命令。
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
安装基本的系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装过程中如果出现以下错误,那么就是yum-config-manage这个文件的头的Python版本错误,建议查看自己当前Python版本,在终端输入Python即可查看,Python2.7==》Python2, Python3.5.xx ==》Python3 or Python35,也有可能是更换Python版本代码编译不通过问问题,如果更换Python3那么就要把135行更换掉。
File "/bin/yum-config-manager", line 135 except yum.Errors.RepoError, e: ^ SyntaxError: invalid syntax
更换代码135行
133 try: 134 opts = yb.doUtilConfigSetup() 135 except yum.Errors.RepoError as e: 136 logger.error(str(e)) 137 sys.exit(50)
还有这种错误
File "/bin/yum-config-manager", line 159 print yb.fmtSection('main') ^ SyntaxError: invalid syntax
给159,160,196,201,222,233,244,271行的print添加()
159 print(yb.fmtSection('main')) 160 print(yb.conf.dump())
239,254,261行的try更换
239: except (IOError, OSError, yum.Errors.YumBaseError) as e: 254: except yum.Errors.DuplicateRepoError as e: 261: except ValueError as e: 272: except (IOError, OSError) as e:
脚本安装
安装之前必须确保yum包是最新状态
yum update
下载、执行安装docker脚本
下载: curl -fsSl https://get.docker.com -o get-docker.sh 执行: sudo sh get-docker.sh
执行完get-docker.sh这个脚本之后会自动添加一个docker.repo源并安装Docker。
启动docker进程
sudo systemctl start docker
测试docker是否安装成功
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly
测试完成之后如果出现这个,那就说明docker安装成功了。
Docker的三大组件
镜像(image)
Docker运行容器之前需要本地存在对应的镜像。
镜像是用来创建Docker容器的。一个镜像可以包含一个完整的操作系统环境和用户需要的其他应用程序,在Docker Hub里面有大量现成的镜像提供下载,Docker的镜像是只读的,一个镜像可以创建多个容器。
容器(Container)
Docker利用容器来进行开发,运行应用。
容器是镜像创建的实列,它可以启动,开始,停止,删除,每个容器都是相互隔离的,保证安全的平台。
仓库(repository)
仓库是集中存放镜像文件的地方。
每个仓库中又包含了多个镜像,每个镜像有不同的标签(TAG)
获取镜像的命令是 docker pull 格式: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] 使用: docker pull ubuntu:18.04 上列的命令中,拉取镜像的同时,没有给出具体的镜像仓库地址,所以默认去 docker hub 获取镜像, 镜像名称是ubuntu:18.04的镜像,因此将会获取官方镜像 library/ubuntu 仓库中标签为18.04的镜像。
获取镜像成功之后,接下来运行镜像。
在此ubuntu容器就运行起来了,进入了ubuntu系统中。
参数: docker run 运行容器的命令 -it 这是两个参数 -i: 交互式操, -t: 终端 --rm 容器退出之后随即删除,避免浪费空间,默认情况容器是不会自动删除的需要手动删除。
列出所有镜像
docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 7698f282e524 2 weeks ago 69.9MB hello-world latest fce289e99eb9 4 months ago 1.84kB
参数:
REPOSITORY: 仓库名称
TAG: 标签
IMAGE ID: 镜像ID
CREATED: 创建时间
SIZE: 占用空间
镜像体积
docker system df
虚悬镜像
<none> <none> 00285df0df87 5 days ago 342 MB
这个镜像原本是有镜像名和标签的,原来为mongo:3.2 随着官方镜像维护,发布了新版本之后,重新 docker pull mongo:3.2 的时候,mongo:3.2这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消了,从而成为了<none>,除了 docker pull可能会导致成这种情况, docker build 也同样可以导致这种现象,由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名, 标签均为<none>的镜像。这类无标签镜像也被称之为虚悬镜像,可以使用下面的 命令来专门显示这类镜像。
docker image ls -f dangling=true
虚悬镜像一般来说是没有用的, 可以删除,使用以下命令删除虚悬镜像。
docker image prune
列出指定镜像
docker image ls ubuntu # ubuntu镜像名称
列出特定的某个镜像
docker image ls ubuntu:18.04 # ubuntu:18.04 镜像名称: 18.04 标签
过滤出 ubuntu:18.04镜像之后创建的镜像
docker image ls -f sinc=ubuntu:18.04
过滤出ubuntu:18.04之前创建的镜像
docker image ls -f before=ubuntu:18.04
已镜像ID显示出镜像数量
docker image ls -q
# 镜像ID
7698f282e524
fce289e99eb9
format模板语法显示指定字段
docker image ls --format "{{.ID}}: {{.Repository}}" # 显示 7698f282e524: ubuntu fce289e99eb9: hello-world
显示标题行,自己定义列
docker image ls --format "table {{.ID}} {{.Repository}} {{.Tag}}" # 显示 IMAGE ID REPOSITORY TAG 7698f282e524 ubuntu 18.04 fce289e99eb9 hello-world latest
删除镜像
删除之前,镜像必须停止,才可以删除。
docker image rm 镜像ID
Docker运行Nginx
获取nginx镜像 sudo docker pull nginx 查看当前运行的docker镜像 docker ps 运行Nginx镜像 sudo docker run -d -p 8000:80 --name nginx_test nginx
运行起来之后IP加端口在浏览器打开就可以看到 Welcome to nginx! 那就成功啦!
进入Docker运行中容器
docker image ls # 查看镜像 docker ps # 查看运行中的容器 docker ps -a # 查看所有容器 docker exec -it webserver容器名称 bash