docker(ubuntu)搭建web环境(php7.1 + mysql5.7 + apache2.4)

  • 宿主机系统: centOs7

一、创建docker容器

bash 复制代码
# pull ubuntu
docker pull ubuntu:22.04


# 创建dockerfile,配置 ja 语言环境
cd /opt
mkdir dockerfiles

cd dockerfiles/
chmod -R 777 /opt/dockerfiles

vi ubuntu:ja

# 将下面这段代码贴到 ubuntu:ja 里

FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install language-pack-ja -y
RUN update-locale LANG=ja_JP.UTF-8
RUN locale-gen ja_JP.UTF-8
RUN ln -s /usr/lib/locale/ja_JP.UTF-8 /var/lib/locales/ja_JP.UTF-8
RUN echo 'export LC_ALL=ja_JP.UTF-8' > /etc/profile
RUN . /etc/profile

# build docker 镜像
docker build -t ubuntu:ja -f ubuntu:ja .

# 查看新构建的镜像是否出现在列表中
docker images  

# 创建容器
docker run --name demo-test -h "demo-test" --privileged -d -p 50080:8080 -v /var/www/demo:/var/www/demo -v /var/log/demo:/var/log/demo -v /mnt/efs/test/medias:/mnt/efs/test/medias --ulimit memlock=-1 -td ubuntu:ja /bin/bash


# 启动容器
docker start demo-test

# 查看容器
docker ps -a



# 进入容器内部
docker exec -it demo-test bash

docker run --name demo-test -h "demo-test" --privileged -d -p 50080:8080 -v /var/www/demo:/var/www/demo -v /var/log/demo:/var/log/demo -v /mnt/efs/test/medias:/mnt/efs/test/medias --ulimit memlock=-1 -td ubuntu:ja /bin/bash

命令详解:

  1. docker run :

    这是Docker的一个命令,用于从指定的镜像启动一个新的容器。

  2. --name demo-test :

    这个选项为容器指定了一个名称,即demo-test。通过这个名称,你可以轻松地引用或管理容器。

  3. -h "demo-test" :

    这个选项设置了容器内部的主机名(hostname)为demo-test。这意味着在容器内部运行命令时,主机名将显示为demo-test

  4. --privileged :
    这个选项给予容器额外的权限,使其几乎拥有宿主机上的所有能力。这通常用于需要直接访问宿主机硬件或执行某些需要高权限操作的容器。然而,使用--privileged选项会增加安全风险,因为它允许容器执行对宿主机有潜在危害的操作。

  5. -d :
    这个选项表示容器将以"分离模式"(detached mode)运行,即在后台运行,并且不会占用当前的命令行。

  6. -p 50080:8080 :
    这个选项将容器内部的8080端口映射到宿主机的50080端口上。这意味着你可以通过访问宿主机的50080端口来访问容器内部运行在8080端口上的服务。

  7. -v /var/www/demo:/var/www/demo :
    这个选项创建了一个卷(volume),将宿主机的/var/www/demo目录挂载到容器的/var/www/demo目录上。这样,容器和宿主机之间可以共享数据。

  8. -v /var/log/demo:/var/log/demo :
    类似于上一个-v选项,这个选项将宿主机的/var/log/demo目录挂载到容器的/var/log/demo目录上。

  9. -v /mnt/efs/test/medias:/mnt/efs/test/medias :
    同样是一个-v选项,它将宿主机的/mnt/efs/test/medias目录挂载到容器的同名目录上。

  10. --ulimit memlock=-1 :
    这个选项设置了容器可以锁定的内存量(通过mlock系统调用)的限制为无限制(-1)。在某些情况下,这可能对需要锁定大量内存以避免被交换到磁盘上的应用程序很有用。

  11. -t :
    这个选项为容器分配一个伪终端(pseudo-TTY),即使容器在后台运行,你也可以通过docker attach命令连接到这个终端。然而,在这个命令中,-t-d一起使用时,-t通常不会改变容器的行为,因为-d已经让容器在后台运行了。

  12. ubuntu:ja :
    这指定了要从中创建容器的镜像名称和标签(tag)。在这个例子中,它指定了一个带有日语本地化(假设ja表示日语)的Ubuntu镜像。如果ja标签不存在,Docker可能会尝试从Docker Hub上拉取默认的ubuntu镜像。

  13. /bin/bash :
    这是容器启动时要执行的命令。在这个例子中,它启动了一个Bash shell。由于使用了-d选项,Bash shell将在后台运行,并且你可能不会立即看到任何输出。要与容器交互,你可以使用docker exec命令。

需要注意的是,虽然命令中同时包含了-t-d选项,但在这个上下文中,-t实际上没有太多作用,因为容器是在后台运行的。如果你想要与容器交互,你应该去掉-d选项,或者使用docker attach命令连接到已经在后台运行的容器。

另外,--privileged选项的使用应该非常谨慎,因为它会给予容器几乎与宿主机相同的权限。在大多数情况下,最好避免使用它,并寻找更安全的方法来配置容器。

二、进入容器,安装php apache mysql 等

安装mysql

将下载的安装包导入前面映射的任意一个目录里,这样就直接反应到容器里了

这里导入到 /var/www/demo 这个目录里了

bash 复制代码
#将下载好的压缩包放到 /var/www/demo 路径下,并解压
cd /var/www/demo
mkdir mysql-server_5.7.34
tar xf  mysql-server_5.7.34-1ubuntu16.04_amd64.deb-bundle.tar -C ./mysql-server_5.7.34

cd mysql-server_5.7.34

# 执行解压完成后的deb文件,中间有error不用管,
# 最后 apt --fix-broken install 这个命令会解决

dpkg -i mysql-common_5.7.34-1ubuntu16.04_amd64.deb

dpkg -i mysql-community-client_5.7.34-1ubuntu16.04_amd64.deb

dpkg -i mysql-client_5.7.34-1ubuntu16.04_amd64.deb

dpkg -i mysql-community-server_5.7.34-1ubuntu16.04_amd64.deb

apt --fix-broken install

# 输完两次密码后就安装OK啦~

# 查看是否安装成功
mysql -V

# 启动mysql并确认状态
service mysql start
service mysql status

安装php

bash 复制代码
#安装软件源扩展工具
apt -y install software-properties-common apt-transport-https lsb-release ca-certificates

#添加PHP PPA源
add-apt-repository ppa:ondrej/php


#install php 7.1
apt install php7.1-fpm php7.1-mysql php7.1-curl php7.1-gd php7.1-mbstring php7.1-xml php7.1-xmlrpc php7.1-zip php7.1-opcache php7.1-redis php7.1-memcache -y


# 确认php是否安装成功
php -v

安装apache并配置config

bash 复制代码
#install apache2.4
apt-get install apache2


# 安装 apache 解析php模块
apt-get install libapache2-mod-php7.1


apache2 -version

# 启动apache
service apache2 start
service apache2 status

cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/pia-demo.conf



# install  vim
apt install vim

#编辑conf
vim  /etc/apache2/sites-available/pia-demo.conf




# 将下面这段配置粘贴到 pia-demo.conf 中

Listen 8080
<VirtualHost *:8080>

        ServerName demo1.pia-jp.tokyo
        ServerAdmin webmaster@localhost
       
        DocumentRoot /var/www/demo/HankyuHanshinPartrol/HankyuHanshinManagement (这里替换成你的项目目录)

        SetEnv HANKYUHANSHIN_TOOL_ENV test

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        
		<Directory (这里替换成你的项目目录)>
				Options FollowSymLinks
				DirectoryIndex index.php
				AllowOverride All
				Require all granted
		</Directory>

		Alias /medias/ /mnt/efs/test/medias/
		<Directory /mnt/efs/test/medias/>
			Require all granted
		</Directory> 


</VirtualHost>   



#禁用默认的虚拟主机配置(000.default.conf),然后启用新的虚拟主机配置
cd /etc/apache2/sites-available
a2dissite 000-default.conf
a2ensite pia-demo.conf


# Enable module rewrite.
# 作用:使apache识别path模式的url
a2enmod rewrite

service apache2 restart

然后就可以通过浏览器通过宿主机的 50080 端口访问docker内的web画面了

访问格式: http://宿主机IP:50080

三、参考链接:

Apache/2.4.41 (Ubuntu) 安装配置指南 - 简书

ubantu环境下安装mysql 5.7版本_ubuntu e: package 'mysql-server-5.7' has no instal-CSDN博客

Ubuntu安装mysql5.7(适用于大多数ubuntu版本)_ubuntu_qq_41265137-GitCode 开源社区

https://qiita.com/sachiko-kame/items/e50cc399069edd5701fa

相关推荐
Java陈序员2 天前
轻量强大!一款现代化的 Kubernetes 集群管理与监控工具!
云原生·容器·kubernetes
Sheffield4 天前
Docker的跨主机服务与其对应的优缺点
linux·网络协议·docker
Sheffield4 天前
Alpine是什么,为什么是Docker首选?
linux·docker·容器
马艳泽4 天前
win10下运行Start Broker and Proxy报错解决
docker
元Y亨H5 天前
华硕主机重装 Ubuntu 系统完全指南
ubuntu
用户13573999256605 天前
Windows 从 0 搭建 WSL2 原生 AI 开发环境:Codex + Docker + VSCode
docker
vi_h5 天前
在 macOS 上通过 Docker 安装并运行 Ollama(详细可执行教程)
macos·docker·ollama
黑心老魔5 天前
通过 Docker 创建开发环境
docker·开发环境
冬奇Lab6 天前
一天一个开源项目(第41篇):Workout.cool - 现代化开源健身教练平台,训练计划与进度追踪
docker·开源·资讯
天朝八阿哥6 天前
使用Docker+vscode搭建离线的go开发调试环境
后端·docker·visual studio code