本文的目的是介绍Docker部署LAMP环境的详细情况,特别关注dockerlamp环境搭建的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Docker部署LAMP环
本文的目的是介绍Docker 部署 LAMP 环境的详细情况,特别关注docker lamp环境搭建的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解Docker 部署 LAMP 环境的机会,同时也不会遗漏关于2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在、Ansible-galaxy 轻松批量安装 docker&docker-compose 环境、centos 7.2 64 位 docker 安装 lamp 环境、centos7+docker 安装和部署 crawlab 分布式爬虫平台,并使用 docker-compose 管理 docker的知识。
本文目录一览:- Docker 部署 LAMP 环境(docker lamp环境搭建)
- 2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在
- Ansible-galaxy 轻松批量安装 docker&docker-compose 环境
- centos 7.2 64 位 docker 安装 lamp 环境
- centos7+docker 安装和部署 crawlab 分布式爬虫平台,并使用 docker-compose 管理 docker
Docker 部署 LAMP 环境(docker lamp环境搭建)
为了避免配置 LAMP 的麻烦,使用 docker 直接在服务器上创建一个 LAMP 容器。
1. 安装 启动 docker,并查看 docker 信息
yum install -y docker
systemctl start docker
docker version
2. 我们使用 「tutum」的镜像作为基础镜像,直接 pull 他们的镜像来完成我们的操作。
docker pull tutum/lamp
3. 查看拉下拉的 docker 镜像
docker images
4. 启动 docker 镜像
docker run -d -p 80:80 -p 3306:3306 tutum/lamp
5. 在容器中访问 mysql 数据库
当我们第一次以 tutum/lamp 镜像启动容器的时候,它会自动创建一个叫 admin 的 mysql 用户,并生成一个随机密码,使用「docker logs + 容器 ID」可以获取到这个密码。
docker logs name
附录:
1.docker 常用命令
#拉取镜像
docker pull tutum/lamp
#查看镜像
docker images
#启动容器并绑定端口
docker run -d -p 8080:80 -p 3306:3306 tutum/lamp
#查看运行的容器
docker ps
docker ps -a
#进入正在运行的容器
docker exec -it ''id'' /bin/bash
#退出容器
exit
#停止容器
docker stop ''id''
2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在
2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在 k3s 中,并且默认 local 是 docker,yaml 文件如何写?
答案 2022-12-23:
1.portainer 在默认情况下用的是 k8s 环境,所以需要改成 docker 环境,根据如下代码块一的 go 代码可知,把 "KUBERNETES_SERVICE_HOST" 环境变量设置为空,就会把默认环境变成 docker 环境。
2. 根据命令行参数,给 --admin-password 一个值,你就不需要创建用户了。
3.--admin-password 是一个哈希值,根据如下代码块二的 go 代码可知,需要将密码转成哈希才行。"moonfdd--moonfdd" 转换成哈希是 "$2a$10$4m4rYwK/TA8GRkyz4UrZ2e8B4GDG8ZhBkyGawJ05q1zJ7zmLywzmW"。
// 代码块一
// api/platform/platform.go
const (
PodmanMode = "PODMAN"
KubernetesServiceHost = "KUBERNETES_SERVICE_HOST"
NomadJobName = "NOMAD_JOB_NAME"
)
// DetermineContainerPlatform will check for the existence of the PODMAN_MODE
// or KUBERNETES_SERVICE_HOST environment variable to determine if
// the container is running on Podman or inside the Kubernetes platform.
// Defaults to Docker otherwise.
func DetermineContainerPlatform() (ContainerPlatform, error) {
podmanModeEnvVar := os.Getenv(PodmanMode)
if podmanModeEnvVar == "1" {
return PlatformPodman, nil
}
serviceHostKubernetesEnvVar := os.Getenv(KubernetesServiceHost)
if serviceHostKubernetesEnvVar != "" {
return PlatformKubernetes, nil
}
nomadJobName := os.Getenv(NomadJobName)
if nomadJobName != "" {
return PlatformNomad, nil
}
if !isRunningInContainer() {
return "", nil
}
dockerCli, err := client.NewClientWithOpts()
if err != nil {
return "", errors.WithMessage(err, "failed to create docker client")
}
defer dockerCli.Close()
info, err := dockerCli.Info(context.Background())
if err != nil {
if client.IsErrConnectionFailed(err) {
log.Warn().
Err(err).
Msg("failed to retrieve docker info")
return "", nil
}
return "", errors.WithMessage(err, "failed to retrieve docker info")
}
if info.Swarm.NodeID == "" {
return PlatformDockerStandalone, nil
}
return PlatformDockerSwarm, nil
}
// 代码块二
// api/cmd/portainer/main.go
adminPasswordHash := ""
if *flags.AdminPasswordFile != "" {
content, err := fileService.GetFileContent(*flags.AdminPasswordFile, "")
if err != nil {
log.Fatal().Err(err).Msg("failed getting admin password file")
}
adminPasswordHash, err = cryptoService.Hash(strings.TrimSuffix(string(content), "\n"))
if err != nil {
log.Fatal().Err(err).Msg("failed hashing admin password")
}
} else if *flags.AdminPassword != "" {
adminPasswordHash = *flags.AdminPassword
}
yaml 如下:
# 用户名:admin
# 密码:moonfdd--moonfdd
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: portainer
name: portainer
namespace: moonfdd
spec:
replicas: 1
selector:
matchLabels:
app: portainer
template:
metadata:
labels:
app: portainer
spec:
containers:
- env:
- name: "KUBERNETES_SERVICE_HOST"
value: ""
args:
- "--admin-password"
- "$2a$10$4m4rYwK/TA8GRkyz4UrZ2e8B4GDG8ZhBkyGawJ05q1zJ7zmLywzmW"
image: portainer/portainer-ce:alpine
imagePullPolicy: IfNotPresent
name: portainer
securityContext:
privileged: true
volumeMounts:
- mountPath: /var/run/docker.sock
name: volv
# - mountPath: /data
# name: volv2
volumes:
- hostPath:
path: /var/run/docker.sock
type: Socket
name: volv
# - hostPath:
# path: /root/k8s/moonfdd/portainer/data
# type: DirectoryOrCreate
# name: volv2
---
apiVersion: v1
kind: Service
metadata:
labels:
app: portainer
name: portainer
namespace: moonfdd
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 8000
name: 8000-8000
- port: 9443
protocol: TCP
targetPort: 9443
name: 9443-9443
- port: 9000
protocol: TCP
targetPort: 9000
name: 9000-9000
selector:
app: portainer
type: NodePort
Ansible-galaxy 轻松批量安装 docker&docker-compose 环境
ansible 相信大家都用过,或者了解过,使用 ansible 可以大大节省我们批量任务执行的繁琐工作,
并且 ansible 是无 agent 端工具,安装简单,使用方便,话不多说,下面给大家演示下 ansible 批量安装 docker&docker-compose 环境。
ansible 安装及主机添加步骤省略,yum 安装或源码安装都是没有问题,hosts 配置文件中添加对应需要安装环境的主机群组,分发公钥即可。
不会的话,自行百度即可,使用 ansible ''group_name'' -m ping 即可检查主机群组是否添加成功。
''ping'' , ''pong'' 有响应说明群组添加嚒有问题,这当然也不是重点,重点在接下来的 ansible-galaxy 命令,相信 ansible 用过的人很多,
但是里面的好多命令却没有几个认真去看过,大佬除外哈 0.0 。对于刚开始用 ansible 对我们来说,能达到我们一般需求就已经很满足了,没有必要把这个东西深挖。
ansible-galaxy 这个命令其实不需要怎么使用,百度 ansible galaxy 官网即可看到,然后在 search 里搜索 docker,即可看到有相关大神写好的安装脚本。
点击进入即可看到下安装命令,直接复制后在 ansible 服务进行下载即可。需要注意的一点是下载之后你的文件的存储目录是 /root/.ansible/roles 目录
需要将下载文件移动至 /etc/ansible/roles 目录中,当然如果你是 rpm 安装的话,转移至你的 ansible 安装目录下的 roles 目录即可
如图:
目录结构大致如下,如需详细了解自行百度 ansible-playbook 目录结构:
角色期望文件位于某些目录名称中。角色必须至少包含其中一个目录,但是排除任何未使用的目录是完全正确的。在使用时,每个目录必须包含一个 main.yml 文件,其中包含相关内容:
- site:是 ansible 的统一入口,就行调用的安装服务总配置
- webservers.yaml:主要是对 ansible 里一些能做功能,yum 等
- roles:角色目录
- common:公共的 roles 目录
- nginx:角色的软件目录
- tasks:包含角色要执行的主要任务列表
- handlers:包含处理程序,可以由此角色使用,甚至可以在此角色之外的任何位置使用
- defaults:角色默认的变量
- vars:角色其他的变量
- files:包含可以通过此角色部署的文件
- templates:包含可以通过此角色部署的模板
- meta:角色定义的一些元数据
接下来通过 ansible 运行 playbook.yml 文件即可进行批量安装。
安装时即可定义 docker-compose 版本号,以及需要安装的服务器组名称,其他配置根据需要自行修改
修改完成后 cd /etc/ansible/roles/geerlingguy.docker/molecule/default
执行 ansible-playbook playbook.yml
通过 ansible 命令查看 docker 安装版本,确认是否完成安装
至此,安装完毕。。。
centos 7.2 64 位 docker 安装 lamp 环境
1. 删除 docker 可能有的早期版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 安装 docker 需要的一些依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3. 配置 docker 的 repo 以便 yum install 时能够使用到最新的 docker 版本 image
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
4. 安装 docker-ce 及 cli
yum install docker-ce docker-ce-cli containerd.io
5. 立即启动 docker engine 并设置开机启动
systemctl start docker
systemctl enable docker
systemctl list-unit-files | grep enabled 检查确认是否已经开机启动
6. 试运行 docker container
docker run hello-world
结果出错,google 后发现是 kernel 不匹配,因为 centos7.2 的 kernel 太旧,必须更新 kernel
下面将记录如何将 centos7.2 升级 kernel 到 5.0,以下链接可以供参考:
https://www.tecmint.com/install-upgrade-kernel-version-in-centos-7/
https://www.jianshu.com/p/1261ed6f8399
7. 配置 repo,并且安装最新的 linux kernel (5.0)
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml
8. 将 5.0 的 kernel 在 centos7.2 中配置为开机默认项
/etc/default/grub 中增加一个 GRUB_DEFAULT=0 这样就选择最新安装的那个 kernel 了
grub2-mkconfig -o /boot/grub2/grub.cfg 重新生成 kernel 配置信息,以便自动应用新安装的 kernel
9. 重新启动
10. 如果有必要可以创建一个 docker group, 并将对应用户名加到这个 group 中,避免使用 root 直接操作,提高安全性
groupadd docker
11. 镜像加速:
在 /etc/docker/daemon.json 文件中添加以下内容,
{
"registry-mirrors": ["https://etomhx9s.mirror.aliyuncs.com"]
}
并执行:
sudo systemctl daemon-reload
sudo systemctl restart docker
之后所有对 docker 官方的镜像都会自动加速使用阿里云的 mirror
12. centos 安装 docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
13. 安装 command-line completion 以便使用 tab 键快速列出可选子命令
请参考页面: https://docs.docker.com/compose/completion/
curl -L https://raw.githubusercontent.com/docker/compose/1.23.2/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
//// trouble shooting:
curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh
bash ./check-config.sh
准备工作已经做完,下面需要安裝 nginx+php-fpm (7.1)+mysql (5.6.35)+redis 的容器了.
思路是:通过 docker-compose 方式来编排微服务,分别切分为 nginx web 服务器,nginx 使用官方镜像;upstream php-fpm 应用服务,php-fpm 则基于官方 7.1 的镜像添加一些扩展安装以及 composer 安装,
注意 php-fpm7.2 以上版本往往会出现以下错误 "Parameter must be an array or an object that implements Countable"
mysql 和 redis 也直接使用官方镜像起一个微服务即可。其中 mysql 使用一个 volume 直接应用已经存在的数据库文件,后续可以考虑使用一个数据卷容器来服务数据
由于众所周知的伟大的墙,给我们苦逼的程序猿带来了太多的麻烦,好在 docker 公司提供的 play-with-docker 可以免费提供 4G 内存的云主机足够我们使用。我们直接在该云主机上使用 docker-compose build 命令做镜像构建,随后 push 到 docker hub 上。最后在国内的主机上 docker pull 下来镜像并使用 docker-compose up -d nginx 一下子就把所有服务拉起了!
14. 将我们的 docker-compose up -d xxx 作为开机启动
a) 在 /etc/systemd/system 目录中创建一个 myapp.service 文本文件
[Unit]
Description=myappservice
After=docker.service#注意本服务依赖于docker service,而dockerservice又require docker.socket 必须在docker engine起来之后才能执行,docker启动比较慢,需要2分钟左右
[Service]
# see man systemd.service
Type=oneshot
WorkingDirectory=/yourworkingdirectory
ExecStart=/yourworkingdirectory/start-all.sh
RemainAfterExit=true
ExecStop=/yourworkingdirectory/stop-all.sh
StandardOutput=journal
[Install]
WantedBy=multi-user.target
b) 在 /yourworkingdirectory 中分别创建 start-all 和 stop-all.sh 脚本
#!/bin/bash
# This is the stop script
docker-compose up -d xx
#!/bin/bash
# This is the stop script
docker-compose stop
c) 将启动和停止脚本赋予执行权限: chmod u+x start-all.sh
d)# systemctl enable yourservice
Created symlink from /etc/systemd/system/multi-user.target.wants/yourservice.service to /etc/systemd/system/yourserivce.service.
搞定!
optional:
你可能希望起一个 mysqladmin 方便你图形化管理数据库
docker run --name myadmin -d --link dockerdeployconf_mysql_1:mysql --net dockerdeployconf_default -e PMA_HOST=mysql -p 8080:80 phpmyadmin/phpmyadmin
docker-compose.yml
version: ''3''
services:
myapp:
build:
context: /pathtoconfig
dockerfile: Dockerfile-phpfpm
image: xx/myimage:7.1
depends_on:
- mysql
- redis
volumes:
- /pathtophpapp/:/application
mysql:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=yourrootpassword
- MYSQL_DATABASE=yourdatabase
volumes:
- /pathtodatafile/:/var/lib/mysql
nginx:
image: nginx
ports:
- "80:8000"
volumes:
- /pathtoconfig/nginx.conf:/etc/nginx/conf.d/default.conf
- /pathtophpapp/:/application
depends_on:
- myapp
redis:
image: redis
ports:
- "6379:6379"
dockerfile-phpfpm
FROM php:7.1-fpm
LABEL maintainer="zhang@xx.com"
# Installing dependencies
RUN apt-get update && apt-get install -y \
build-essential \
mysql-client \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
libzip-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Installing extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath opcache
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
# Installing composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Setting locales
RUN echo zh_CN.UTF-8 UTF-8 > /etc/locale.gen && locale-gen
# Changing Workdir
WORKDIR /application
nginx.conf
server {
listen 8000;
index index.php index.html index.htm;
root /application/public; # default Laravel''s entry point for all requests
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass myapp:9000; # address of a fastCGI server
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_https://github.com/rlerdorf/php7dev/issues/48_info;
include fastcgi_params;
}
}
其中需要另外注意的一点是:
php-fpm 的 log 搜集问题:
catch_workers_output = yes
https://github.com/rlerdorf/php7dev/issues/48
https://stackoverflow.com/questions/8677493/php-fpm-doesnt-write-to-error-log
centos7+docker 安装和部署 crawlab 分布式爬虫平台,并使用 docker-compose 管理 docker
1. 先决条件 centos7+docker 最新版本
sudo yum updat
2. 配置一下镜像源,创建 /etc/docker/daemon.conf 文件,在其中输入如下内容
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
3. 启动 docker 命令:
systemctl start docker
重启 docker 服务:
service docker restart
4. 查看和下载 Crawlab 的镜像命令 :
docker search crawlab #(查找Crawlab镜像)
docker pull tikazyq/crawlab:latest #(下载Crawlab镜像)
5. 创建 docker 组:
sudo groupadd docker (删除docker这个用户:userdel -r docker)
6.centos7 查看所有用户:
cut -d : -f 1 /etc/group
7. 将您的用户添加到该 docker 用户组,命令:
sudo usermod -aG docker 用户名
8. 查看 “docker” 组下的所有用户,命令:
grep ''docker'' /etc/group
9.Docker Compose 安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
稍等片刻,有点慢!!!!
赋权:
sudo chmod +x /usr/local/bin/docker-compose
查看版本:
docker-compose --version
10. 查找 docker-compose.yml 文件位置:
find / -name "docker-compose.yml*"
(会出现 find: ‘/run/user/1000/gvfs’: 权限不够,执行:umount /run/user/1000/gvfs 和 rm -rf /run/user/1000/gvfs, 再执行就不会出错了!!!
11. 图中:
/var/lib/docker/overlay2/50df4de9bf340501cade27650953ad983948b10e13bbe931710ef090ab1a4602/diff/app/docker-compose.yml-----------是我的路径
cd 到 app 目录就可以了
vim docker-compose.yml #编辑
注意: 新版镜像的 CRAWLAB_API_ADDRESS 是这样的: CRAWLAB_API_ADDRESS: "http://192.168.157.128:8000"
12. 启动 Crawlab
cd 进入到 docker-compose.yml 所在文件目录下
才能运行:docker-compose up
集群启动容器,否则找不到文件
查看 woker 容器日志命令:docker-compose logs worker
正常会启动四个容器:master、woker、redis、mongo
第一次次启动会下载安装并配置节点和数据库(redis 和 mongodb)
13.Crawlab
浏览器访问 :http://ip:8080 用户名密码是 admin/admin
第一次访问没问题,但是第二次启动会报各种错,博主正在研究中 ----- 持续更新中!!!
关于Docker 部署 LAMP 环境和docker lamp环境搭建的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于2022-12-23:portainer 是 docker 的 web 可视化工具。如果根据 docker 部署去写 yaml,默认 local 是 k8s,而不是 docker,这不符合需求,需要修改 yaml。请问部署在、Ansible-galaxy 轻松批量安装 docker&docker-compose 环境、centos 7.2 64 位 docker 安装 lamp 环境、centos7+docker 安装和部署 crawlab 分布式爬虫平台,并使用 docker-compose 管理 docker等相关知识的信息别忘了在本站进行查找喔。
本文标签: