GVKun编程网logo

Docker 部署 LAMP 环境(docker lamp环境搭建)

12

本文的目的是介绍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环境搭建)

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。请问部署在

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-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 环境

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

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/gvfsrm -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)

img

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等相关知识的信息别忘了在本站进行查找喔。

本文标签: