Docker虚拟机配置手札(centos)

本文涉及的产品
.cn 域名,1个 12个月
简介:

Docker虚拟机配置手札(centos)

一、Docker只支持CentOS7及以上系统,不支持6.x系统
二、yum安装Docker
1、安装相关环境和设置仓库

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2、安装Docker社区版

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 配置文件,不知道配置文件在哪里可以用以下命令显示

systemctl disable docker
systemctl enable docker

显示结果

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
2、修改 docker.service 配置文件

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服务

systemctl daemon-reload #重载配置文件
systemctl restart docker #重启docker
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、后台运行镜像(会新建一个容器)

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服务

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

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

"Config": {

....
"ExposedPorts": {
    "22/tcp": {},
    "3306/tcp": {}
},
....

},
"NetworkSettings": {

....
"Ports": {
    "22/tcp":null,
    "3306/tcp": [{
        "HostIp": "",
        "HostPort": "13306"
    }],
},
...

}

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

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

systemctl start docker
docker start 容器ID
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器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、服务器防火墙开放相应的端口

查看开放的端口

firewall-cmd --list-port

添加端口(永久)

firewall-cmd --zone=public --add-port=13306/tcp --permanent

重载防火墙

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

cat /etc/hosts
172.17.0.2 blog.demo.batsing.com
4、Nginx中配置vhost,将demo域名转发到域名自身

server {

listen            80;
server_name        blog.demo.batsing.com;
location / {
    proxy_pass    http://blog.demo.batsing.com;
    proxy_set_header X-Real-IP $remote_addr;                                                   
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
}

}

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

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

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

原文地址https://www.cnblogs.com/batsing/p/docker.html

相关文章
|
2月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
253 1
|
1月前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
26 2
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
100 2
|
1月前
|
安全 Linux Shell
docker运行centos提示Operation not permitted
通过上述步骤,可以有效排查和解决在Docker中运行CentOS容器时遇到的"Operation not permitted"错误。这些措施涵盖了从权限配置、安全策略到容器运行参数的各个方面,确保在不同环境和使用场景下都能顺利运行容器。如果你需要进一步优化和管理你的Docker环境
71 3
|
2月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
124 1
|
2月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
301 3
|
2月前
|
网络安全 虚拟化 Docker
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
47 2
|
2月前
|
存储 监控 Linux
在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践
本文详细介绍了在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践,包括使用 `fdisk` 创建分区、`mkfs` 格式化分区、创建挂载点、编辑 `/etc/fstab` 实现永久挂载等步骤,旨在有效管理服务器磁盘空间,提高系统稳定性和可维护性。
203 1
|
2月前
|
网络协议 Docker 容器
docker中的DNS配置
【10月更文挑战第5天】
390 1
|
2月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
52 1