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

相关推荐
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
Jackey_Song_Odd2 小时前
Ubuntu 24.04.1 解决部分中文字符(门、径)显示错误的问题
linux·ubuntu
tntlbb3 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
热心市民运维小孙3 小时前
Ubuntu重命名默认账户
linux·ubuntu·excel
PyAIGCMaster3 小时前
文本模式下成功。ubuntu P104成功。
服务器·数据库·ubuntu
Gabriel_liao4 小时前
Docker安装Neo4j
docker·容器·neo4j
Jackey_Song_Odd4 小时前
解决Ubuntu下无法装载 Windows D盘的问题
linux·ubuntu
豆豆豆豆变7 小时前
Docker轻量级可视化工具Portainer
docker·容器·自动化运维
花晓木7 小时前
k8s etcd 数据损坏处理方式
容器·kubernetes·etcd
运维&陈同学7 小时前
【模块一】kubernetes容器编排进阶实战之基于velero及minio实现etcd数据备份与恢复
数据库·后端·云原生·容器·kubernetes·etcd·minio·velero