正如其生动的 logo,我瞅着这萌萌的 docker 小鲨鱼拖载着多个集装箱(docker容器),便心生喜爱。
docker 是运行于 Linux 内核,基于操作系统层面的虚拟化技术。相比传统物理层级的虚拟机具有:
占用资源少、秒级启动、快速部署、应用隔离、便于迁移、保证开发测试生产环境一致性、多租户环境等优势。
安装
uname -r #查看linux内核3.10以上 yum -y update #系统升级 yum install -y docker #安装docker reboot #重启linux systemctl start docker #开启docker服务 docker version #查看docker版本号验证思路
通过docker网络,来实现容器之间的访问。
我画了幅示意图如下:
创建并运行容器:
docker run -d [镜像名/id](hash码) #-d后台运行查看容器
docker ps #查看正在运行的容器
docker ps -a #查看所有容器
删除容器
docker rm [容器名/id] #删除容器(exited的)
控制容器状态
docker stop [容器名/id] # exited 状态
docker start/restart [容器名/id] # up 状态
进入运行容器
docker exec -it [容器名/id] bash # -it 交互式终端 bash 运行shell程序
exit # 从容器里退出到宿主机
–port 将宿主机的数据卷映射到容器目录中
–volume 将宿主机的端口映射到容器端口
docker run -p 宿主机端口:容器端口 -v 数据卷名:容器目录 --privileged=true [镜像名/id] #--p特殊权限数据卷功能:供一个或多个容器使用的宿主机特殊目录;用来持久化数据,它的生命周期独立于容器外
数据卷操作
docker volume create 数据卷名 #创建数据卷(自动生成一个目录)
docker volume ls #列出已有数据卷
docker volume inspect 数据卷名 #查看某个数据卷(包括它的目录)
docker volume rm 数据卷名 #删除数据卷(先删使用该卷的容器)
创建并启动容器的同时,再把容器加到特定的网络:
docker run --network 网络名 [镜像名/id]网络功能:实现多个 docker 容器之间的网络互联
网络操作
docker network create 网络名 #创建网络
docker network ls #列出已有网络
docker network inspect 网络名 #查看某个网络
docker network rm 网络名 #删除网络
基于 Linux + Apache + Mysql + Php 的服务器环境,部署网站到 Docker 容器。
systemctl stop firewalld #先暂时关闭防火墙 systemctl restart docker #并重启docker服务数据卷创建
docker volume create webvolXftp 工具上传文件—>数据卷 webvol 的目录 /var/lib/docker/volumes/webvol/_data
开启网卡,得到宿主机的 ip 地址
Xftp 访问宿主机 ip 地址,并上传文件
Linux 解压文件: unzip Discuz_X3.3_SC_UTF8.zip #先cd到webvol/_data
修改文件的权限:chmod -R 777 upload
数据卷创建
docker volume create dbvol数据的持久化,防止对应容器删除后,数据库内容也随之被删除
拉取网站服务器:docker pull webdevops/php-apache-dev
拉取数据库服务器:docker pull mysql:5.5.62
启动 Apache 容器
docker run -d -p 8086:80 -v webvol:/app --network mynet --privileged=true webdevops/php-apache-dev apache 网站发布目录 /app进入容器中查看 cat /opt/docker/etc/httpd/vhost.conf 配置启动 Mysql 容器
docker run -d -p 3306:3306 -v dbvol:/var/lib/mysql --network mynet -e MYSQL_ROOT_PASSWORD=123456 --privileged=true mysql:5.5.62 #-e 容器运行设定参数 mysql 数据存放目录 /var/lib/mysql进入容器中查看 cat /etc/mysql/my.cnf 配置 查看正在运行的容器 docker container ls #可以看到mysql和apache容器已经正在运行 http://192.168.0.124:8086/upload # http://宿主机ip地址:apache端口/upload 该网站文件夹
修改数据库服务器地址为 linux 宿主机的ip,数据库密码是运行 mysql 容器时的密码等。
安装Discuz!X 填写数据库服务器地址(同宿主机ip),数据库密码等。 正在安装论坛网站已成功部署安装
当我停止 docker 服务后,再启动 docker 服务;
systemctl stop docker systemctl start docker docker container ls dcoker volume ls此时容器 mysql 和 apache 已经关闭不运行;
而数据卷 dbvol 和 webvol 依然存在,其中的数据自然存在,这就是持久化。
想要再次部署,只需再 run 一次容器,不用再创建数据卷。
未经许可不得转载,不得盗用图片,欢迎关注本博主其他原创文章。