- 宿主机系统: centOs7
一、创建docker容器
# 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
命令详解:
docker run
:
这是Docker的一个命令,用于从指定的镜像启动一个新的容器。
--name demo-test
:
这个选项为容器指定了一个名称,即demo-test
。通过这个名称,你可以轻松地引用或管理容器。
-h "demo-test"
:
这个选项设置了容器内部的主机名(hostname)为demo-test
。这意味着在容器内部运行命令时,主机名将显示为demo-test
。
--privileged
:
这个选项给予容器额外的权限,使其几乎拥有宿主机上的所有能力。这通常用于需要直接访问宿主机硬件或执行某些需要高权限操作的容器。然而,使用--privileged
选项会增加安全风险,因为它允许容器执行对宿主机有潜在危害的操作。
-d
:
这个选项表示容器将以“分离模式”(detached mode)运行,即在后台运行,并且不会占用当前的命令行。
-p 50080:8080
:
这个选项将容器内部的8080端口映射到宿主机的50080端口上。这意味着你可以通过访问宿主机的50080端口来访问容器内部运行在8080端口上的服务。
-v /var/www/demo:/var/www/demo
:
这个选项创建了一个卷(volume),将宿主机的/var/www/demo
目录挂载到容器的/var/www/demo
目录上。这样,容器和宿主机之间可以共享数据。
-v /var/log/demo:/var/log/demo
:
类似于上一个-v
选项,这个选项将宿主机的/var/log/demo
目录挂载到容器的/var/log/demo
目录上。
-v /mnt/efs/test/medias:/mnt/efs/test/medias
:
同样是一个-v
选项,它将宿主机的/mnt/efs/test/medias
目录挂载到容器的同名目录上。
--ulimit memlock=-1
:
这个选项设置了容器可以锁定的内存量(通过mlock
系统调用)的限制为无限制(-1
)。在某些情况下,这可能对需要锁定大量内存以避免被交换到磁盘上的应用程序很有用。
-t
:
这个选项为容器分配一个伪终端(pseudo-TTY),即使容器在后台运行,你也可以通过docker attach
命令连接到这个终端。然而,在这个命令中,-t
和-d
一起使用时,-t
通常不会改变容器的行为,因为-d
已经让容器在后台运行了。
ubuntu:ja
:
这指定了要从中创建容器的镜像名称和标签(tag)。在这个例子中,它指定了一个带有日语本地化(假设ja
表示日语)的Ubuntu镜像。如果ja
标签不存在,Docker可能会尝试从Docker Hub上拉取默认的ubuntu
镜像。/bin/bash
:
这是容器启动时要执行的命令。在这个例子中,它启动了一个Bash shell。由于使用了-d
选项,Bash shell将在后台运行,并且你可能不会立即看到任何输出。要与容器交互,你可以使用docker exec
命令。
需要注意的是,虽然命令中同时包含了-t
和-d
选项,但在这个上下文中,-t
实际上没有太多作用,因为容器是在后台运行的。如果你想要与容器交互,你应该去掉-d
选项,或者使用docker attach
命令连接到已经在后台运行的容器。
另外,--privileged
选项的使用应该非常谨慎,因为它会给予容器几乎与宿主机相同的权限。在大多数情况下,最好避免使用它,并寻找更安全的方法来配置容器。
二、进入容器,安装php apache mysql 等
安装mysql
- 下载mysql安装包
mysql官网下载地址:https://dev.mysql.com/downloads/mysql/
将下载的安装包导入前面映射的任意一个目录里,这样就直接反应到容器里了
这里导入到 /var/www/demo 这个目录里了
#将下载好的压缩包放到 /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
#安装软件源扩展工具
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
#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 开源社区