一、Docker只支持CentOS7及以上系统,不支持6.x系统

二、yum安装Docker

1、安装相关环境和设置仓库

  1. yum install -y yum-utils device-mapper-persistent-data lvm2
  1. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2、安装Docker社区版

  1. yum install docker-ce docker-ce-cli containerd.io

Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。

3、启动Docker  systemctl start docker

4、运行hello-world  docker run hello-world

三、修改Docker镜像存放目录

docker 默认的存储路径在  /var/lib/docker ,但机子的数据盘挂载在/home目录下,

所以修改docker存储路径到  /home/docker  中。

1、查找 docker.service 配置文件,不知道配置文件在哪里可以用以下命令显示

  1. systemctl disable docker
  2. systemctl enable docker
  3. #显示结果
  4. Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

2、修改 docker.service 配置文件

  1. vi /usr/lib/systemd/system/docker.service

3、在里面的EXECStart找到这样一行

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ,将其修改为

ExecStart=/usr/bin/dockerd --graph /home/docker -H fd:// --containerd=/run/containerd/containerd.sock 保存并退出

4、重载并重启docker服务

  1. systemctl daemon-reload #重载配置文件
  2. systemctl restart docker #重启docker
  3. systemctl enable docker #设为自启动

5、查看docker运行信息  docker info

其中 Docker Root Dir: /home/docker  即表示已经成功修改运行目录了

6、重新下载和运行hello-world镜像

docker run hello-world

四、容器和镜像的导入导出

镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

docker images  查看镜像列表;   docker ps  查看容器列表;

1、保存容器为镜像  docker commit mycentos myos202005  mycentos是容器名,即现正运行的这个虚拟机的名;myos202005是导出的虚拟机镜像名,可用于发布、备份等操作;

2、导出镜像(转格式)为文件  docker save myos202005:latest > /home/myos202005.img

3、导出容器(正在运行的虚拟机)为文件  docker export mycentos > /home/myos202005.img

4、导入镜像, docker load --input /home/myos202005.img

5、导入容器, docker import /home/myos202005.img myos202005

区别:
    docker save保存的是镜像(image),docker export保存的是容器(container);
    docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
    docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

(如果VMware中的虚拟机centos空间不足,需要扩容,参考这篇文章

五、运行虚拟机和进入虚拟机系统

1、后台运行镜像(会新建一个容器)

  1. docker run -itd --privileged=true --name myos202005 myos202005:latest

  (注:以特权模式运行,容器中才能使用启动服务systemctl等系统命令)

2、如果有运行过,则应该启动容器  docker ps -a   docker start 容器ID

2、进入容器(虚拟机),使用 docker ps 查看容器信息,然后  docker exec -it 容器ID /bin/bash

3、退出容器(虚拟机),不关闭容器  Ctrl + P + Q

4、关闭容器, docker stop 容器ID ;重启容器  docker restart 容器ID ;启动容器  docker start 容器ID

5、查看包括已退出的容器  docker ps -a ;删除容器  docker rm 容器ID ;删除镜像 docker rmi 镜像ID

PS:容器ID 和 容器名是等效的,以上命令均可以用容器名替代容器ID。

六、虚拟机端口映射

1、先分别查看本机和docker机的进程端口使用情况 netstat -nlpt

2、查看容器列表信息  docker ps

3、停止容器、停止docker服务

  1. docker stop 容器ID
  2. systemctl stop docker

4、修改容器的配置文件,两个配置文件都要改

  1. vi /var/lib/docker/containers/容器ID/hostconfig.json
    vi /var/lib/docker/containers/容器ID/config.v2.json

PS:如果第三步修改过docker存放目录,如 /home/docker,则配置文件的位置也在相应新的位置

例如把docker中mysql 3306端口,映射到外面的13306端口,以便远程访问docker中的数据库

5、hostconfig.json修改

找到 PortBindings ,把那一段JSON修改为  "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"13306"}]}

6、config.v2.json修改

修改值 config > ExposedPorts 和 NetworkSettings > Ports

  1. "Config": {
  2. ....
  3. "ExposedPorts": {
  4. "22/tcp": {},
  5. "3306/tcp": {}
  6. },
  7. ....
  8. },
  9. "NetworkSettings": {
  10. ....
  11. "Ports": {
  12. "22/tcp":null,
  13. "3306/tcp": [{
  14. "HostIp": "",
  15. "HostPort": "13306"
  16. }],
  17. },
  18. ...
  19. }

7、修改完成后先检查两个文件是否JSON格式正确

8、启动docker,启动容器, 查看容器列表信息,查看端口映射是否生效

  1. systemctl start docker
  2. docker start 容器ID
  3. docker ps
  1. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  2. 容器ID myos202005:latest "/usr/sbin/init" 3 hours ago Up 5 seconds 22/tcp, 1300/tcp, 0.0.0.0:13306->3306/tcp cranky_franklin

如上标红的 13306->3306,则表示端口映射成功

9、查看端口使用情况  netstat -nlpt ,可以看到 docker-proxy 进程使用13306端口

10、服务器防火墙开放相应的端口

  1. #查看开放的端口
  2. firewall-cmd --list-port
  3. #添加端口(永久)
  4. firewall-cmd --zone=public --add-port=13306/tcp --permanent
  5. #重载防火墙
  6. firewall-cmd --reload

如果是用的阿里云,还有“安全组”策略限制了端口访问,需要在阿里云后台操作添加端口

七、Nginx / Apache 反向代理部分域名到docker中

实现效果:blog.batsing.com 正常定向在服务器中,blog.demo.batsing.com 定向到docker中。都是使用80端口。

实现过程:

1、docker机里有内网IP(默认172.17.0.2)

2、服务器可以通过此IP访问到docker中的nginx curl 172.17.0.2:80

3、服务器配置系统hosts,把demo域名指向docker内网IP

  1. cat /etc/hosts
  2. 172.17.0.2 blog.demo.batsing.com

4、Nginx中配置vhost,将demo域名转发到域名自身

  1. server {
  2. listen 80;
  3. server_name blog.demo.batsing.com;
  4. location / {
  5. proxy_pass http://blog.demo.batsing.com;
  6. proxy_set_header X-Real-IP $remote_addr;
  7. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  8. proxy_set_header Host $http_host;
  9. proxy_set_header X-NginX-Proxy true;
  10. }
  11. }

转发到域名自身,因为服务器的hosts配置,所以会转发到docker机中,从而实现部分域名转入到docker中的功能。

服务器中其他站点域名,按nginx正常配置即可。

docker中的nginx配置,也是按正常配置即可,无需另行特殊配置。

Docker虚拟机配置手札(centos)的更多相关文章

  1. 【转】Virtualbox虚拟机配置安装CentOS 6.5图文教程

    http://www.111cn.net/sys/CentOS/61709.htm 什么是Virtualbox? VirtualBox 是一款开源虚拟机软件(注:跟vmware差不多).Virtual ...

  2. CentOS上安装 Docker-CE以及Docker 加速器配置

    在CentOS 7.0上安装 Docker-CE 官方源安装教程 https://docs.docker.com/install/linux/docker-ce/centos/#install-usi ...

  3. Linux 如何配置虚拟机下的Centos静态ip

    如何配置虚拟机下的Centos静态ip 1.        配置虚拟机的虚拟路由器 2.        配置物理主机的虚拟网卡(VMNET8) 3.        配置虚拟主机Centos的网卡 vi ...

  4. 虚拟机中的CentOS 7设置固定IP连接最理想的配置

    说明:在网上搜了好多文章都是大同小异,都没有完全解决我想要的固定IP后要达到的如下效果, 1.笔记本主机IP为设置自动获取,不管什么情况下,不受虚拟机影响,只要连接外网就可以正常上网: 2.只要笔记本 ...

  5. 为centos虚拟机配置固定ip

    在virtual上安装centos虚拟机以后,发现虚拟机没有ip,无法联网 将虚拟机的网络适配器改为桥接模式,桥接到物理机的无线网卡 为虚拟机配置固定IP(vi /etc/sysconfig/netw ...

  6. 虚拟机中的CentOS 7设置固定IP连接最理想的配置(转载)

    来源:虚拟机中的CentOS 7设置固定IP连接最理想的配置(https://my.oschina.net/panhongju/blog/826814) 转载说明:这是我看了很多篇虚拟机静态IP配置写 ...

  7. VM Ware 给Centos虚拟机配置静态IP

    前言:在大家的日常运维工作中,肯定多多少少都会用到虚拟机,但是默认情况下VMware创建的虚拟机每次启动都有可能更换IP这就对我们的工作造成了一定的麻烦,下面我就给大家介绍下,如何给centos虚拟机 ...

  8. 为CentOS下的Docker安装配置python3【转】

    * 安装python3以及docker yum install docker docker pull centos service docker start systemctl enable dock ...

  9. Docker 学习笔记(CentOS 7.1)

    基本概念 Docker 包括三个基本概念 镜像(Image) 容器(Container) 仓库(Repository)理解了这三个概念,就理解了 Docker 的整个生命周期. Docker 镜像 D ...

随机推荐

  1. 怎么查看当前的git分支是基于哪个分支创建的?

    2019独角兽企业重金招聘Python工程师标准>>> Question: 比如从 branch A 切出一个 branch B 然后对branch B做了一系列的操作 然后忘记了b ...

  2. Image Filter and Recover

    这是CS50的第四次大作业,顺便学习了图像的入门知识. 基础 黑白图(bitmap)的每个像素点只能取值0/1,1代表白色,0代表黑色. 常见的图片格式有JPEG/PNG/BMP,这些格式都支持RGB ...

  3. 算法竞赛进阶指南--在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继)

    while (l < r) { int mid = (l + r) / 2; if (a[mid] >= x) r = mid; else l = mid + 1; }

  4. 题解 AT4867 【[ABC155D] Pairs】

    题目 两次二分 首先对ans进行二分,在\([-10^{18},10^{18}]\)之间 考虑怎么check 对于每个ans,枚举每个\(a_i\),二分查找有几个\(a_j\),使得\(a_i\ti ...

  5. 8) drf 三大认证 认证 权限 频率

    一.三大认证功能分析 1)APIView的 dispath(self, request, *args, **kwargs) 2)dispath方法内 self.initial(request, *ar ...

  6. 线程池(Java中有哪些方法获取多线程)

    线程池(Java中有哪些方法获取多线程) 前言 获取多线程的方法,我们都知道有三种,还有一种是实现Callable接口 实现Runnable接口 实现Callable接口 实例化Thread类 使用线 ...

  7. 支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb)

    支付宝小程序serverless---插入数据后获取数据的主键_id(mongodb) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除, ...

  8. tp5中使用ueditor编辑器保存文本到数据库后回显后显示html标签问题解决办法

    在编辑器ueditor中获取文本,保存到到数据库后为 当在数据库中提取出来,在显示回ueditor编辑器时候,出了问题, html标签都显示出来了 百度了下别人的解决办法是,使用官方提供的api 可是 ...

  9. ArrayList扩容机制实探

    ArrayList初始化 问题:执行以下代码后,这个list的列表大小(size)和容量(capacity)分别是多大? List<String> list = new ArrayList ...

  10. vue 在main.js里使用vue实例

    可以用 Vue.prototype 比如 Vue.prototype.$indicator.close(); 关闭正在加载的动画