Centos7 docker docker | 您所在的位置:网站首页 › centos安装Docker到home › Centos7 docker docker |
使用 yum 安装(CentOS 7下)
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。 通过uname -r命令查看你当前的内核版本 [root@runoob ~]# uname -r从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。 Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。 本文介绍 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添加软件源信息: sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新 yum 缓存: sudo yum makecache fast安装 Docker-ce: sudo yum -y install docker-ce启动 Docker 后台服务 sudo systemctl start docker测试运行 hello-world [root@runoob ~]# docker run hello-world由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。 使用脚本安装 Docker1、使用 sudo 或 root 权限登录 Centos。 2、确保 yum 包更新到最新。 $ sudo yum update3、执行 Docker 安装脚本。 $ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh执行这个脚本会添加 docker.repo 源并安装 Docker。 4、启动 Docker 进程。 sudo systemctl start docker5、验证 docker 是否安装成功并在容器中执行一个测试的镜像。 $ sudo docker run hello-world docker ps到此,Docker 在 CentOS 系统的安装完成。 镜像加速鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。 新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。 请在该配置文件中加入(没有该文件的话,请先建一个): { "registry-mirrors": ["http://hub-mirror.c.163.com"] }或 { "registry-mirrors": ["https://hub.daocloud.io"] }{ "registry-mirrors": ["https://1azkbwh7.mirror.aliyuncs.com"] } 删除 Docker CE执行以下命令来删除 Docker CE: $ sudo yum remove docker-ce $ sudo rm -rf /var/lib/docker Docker容器使用问题:Failed to get D-Bus connection: Operation not permitted刚开始接触Docker的朋友,可能会遇到这么一个问题,使用centos7镜像创建容器后,在里面使用systemctl启动服务报错。针对这个报错,我们接下来就分析下! # docker run -itd --name centos7 centos:7 # docker attach centos7 # yum install vsftpd # systemctl start vsftpd Failed to get D-Bus connection: Operation not permitted 不能启动服务,什么情况? 难道容器不能运行服务嘛!!! Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。 再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了! 因此,请遵守容器设计原则,一个容器里运行一个前台服务! 我就想这样运行,难道解决不了吗? 答:可以,以特权模式运行容器。 创建容器: # docker run -dit --privileged -p 8080:80 centos /usr/sbin/init进入容器: # docker exec -it centos /bin/bash这样可以使用systemctl启动服务了。 镜像部署常用操作本地文件上传至docker容器 docker cp 本地文件路径 ID全称:容器路径 docker cp /root/jdk-8u221-linux-x64.tar.gz 694fbffc7687:/usr/java 后台运行镜像 docker run -dit -p 80:80 [CONTAINER_NAME or CONTAINER_ID] /bin/bash 搜索镜像 docker search centos 查看所有容器 docker ps -a 停止容器运行 docker stop {containerID} 删除容器(-f强制删除,正在运行的容器也删除) docker rm -f {containerID} 删除镜像(-f强制删除,否则需先停止容器运行才能删除镜像) docker rmi -f hello 镜像打tag(可以用这种方法更新tag) docker tag hello hello:1.0.0 查看指定镜像 docker images |grep hello 查看指定进程 docker ps | grep hello 将镜像push到镜像仓库 docker push xx.xx.xx.xx/hello 进入正在运行的容器执行指令(exec命令进入容器再退出后,容器不会停止;attach进入容器再退出后,容器停止) docker exec -it 0e6d50eb1469(container ID) /bin/bash docker attach 0e6d50eb1469(container ID) 退出容器 exit / ctrl + c 根据容器的状态,删除exited状态的容器 sudo docker rm $(sudo docker ps -qf status=exited) 退出容器伪终端 按顺序依次ctrl+p,ctrl+q(退出终端不关闭容器) exit或ctrl+d(退出终端并关闭容器) CMD 支持三种格式 CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式; CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用; CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数; 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。 如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。 ENTRYPOINT 两种格式: ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2(shell中执行)。 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。 在容器执行脚本时,注意。当前容器本身是主进程,start.sh的操作是守护进程,必须保证最后一个守护进程处于前台运行状态,否则容器会在执行脚本完成会自动关闭容器,容器停止运行后,所有的脚本里面的进程也随之终止。 之所以出现这种现象,究其原因,一个docker容器同时只能管理一个进程,这个进程退出后,容器也就退出了。这并不意味着一个容器里只能同时运行一个进程(那样太浪费了),只是最后一个运行的进程不能退出。 修改start.sh,保持java命令前台运行,即可避免容器在执行完脚本后exited的情况。start.sh修改如下: #! /bin/sh APPNAME=com.xx.xx.rest.Application java -Xms2048m -Xmx2048m -classpath $CLASSPATH $APPNAME >/dev/null 2>&1 start.sh总结总结: (1)容器中运行多个守护进程时,前面的进程要用后台方式运行(或添加 &),否则后面的服务无法启动。 (2)容器中最后一个守护进程一定要用前台方式运行,否则start.sh退出,容器退出,所有的服务就白启动了。 二、docker-compose的安装 1、使用国内源安装: curl -L http://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose 查看版本: docker-compose --version 前台启动: docker-compose up 后台启动: docker-compose up -d 下载安装: https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose |
CopyRight 2018-2019 实验室设备网 版权所有 |