zl程序教程

您现在的位置是:首页 >  工具

当前栏目

docker --镜像 --容器 --docker-compose 编排 跑lampWordPress和postgres

Docker容器镜像 -- Compose 编排 Postgres
2023-09-14 09:13:14 时间

                    docker --镜像 --容器 --docker-compose 编排 跑lamp,WordPress和postgres

docker的基础知识本文就不说了,docker的三要素是镜像,容器,仓库,这三者形成了一个完整的闭环,当然,环的源头是仓库,各种各样的仓库,比如官方仓库,私有仓库,公有云仓库,自己搭建的私人harbor仓库等等,仓库里存放的是已经由前辈通过go语言制作好了的基础镜像或者是自己通过dockerfile将基础镜像改装而成的适于自己需求的镜像,而我们通过docker这个平台运行镜像就得到了容器,容器是有唯一ID的可运行的镜像,可以理解为镜像的影分身。正是如此,我们才可以方便的通过一个镜像复制出n多个容器,而这些容器又通过特定的规则连接到一起,从而组成一个闭环,这样集群(包括分布式集群)的搭建就非常容易了。

这里提到了一个概念,基础镜像,这个是我们学习的目标,基础镜像的制作并不在我们学习的范围。

本文的实验目标:

1,通过两个官方提供的基础镜像,MySQL5.7版本,WordPress5.5.3。pull(从官方仓库拉取)这两个镜像到本地后,通过docker-compose  编写启动文件管理这两个镜像的启动。

2 ,通过官方提供的postgre的基础镜像,启动这个镜像,pgadmin可以连接到这个容器,并新建数据库。

环境介绍:

使用的是vm的虚拟机,centos,版本为7,docker-ce已经通过yum安装完毕,docker服务已启动,官方仓库已更改为阿里云仓库(提高速度,国外pull镜像太慢了,本地化一下没毛病)

在提醒一次,防火墙和selinux 要么设置好放行服务,要么就关闭它们(我是关闭状态)、

实验1:

MySQL的版本为5.7.18,从网易云拉取的,命令为:

[root@centos6 ~]# docker pull hub.c.163.com/library/mysql
Using default tag: latest
latest: Pulling from library/mysql
42cb69312da9: Already exists 
e2cf5467c4b5: Already exists 
871ec0232f66: Already exists 
3c0ae7ec690d: Already exists 
d39b43089b70: Already exists 
aa0e7cb4b67c: Already exists 
738db9902d06: Already exists 
ae333863ac05: Already exists 
6d014992204a: Already exists 
09aeca0c9a82: Already exists 
0162083b2de0: Already exists 
Digest: sha256:b2bce1a792237ac5df78877d583f34b09ab023a77130921a6bcce67ce2d24ff0
Status: Image is up to date for hub.c.163.com/library/mysql:latest
hub.c.163.com/library/mysql:latest

WordPress从官方拉取的,命令为:

[root@centos6 ~]# docker pull wordpress:latest
latest: Pulling from library/wordpress
Digest: sha256:92e97d9b3147038e3cc541a224cc951bef597061827e23a208a24c36bff1c1fe
Status: Image is up to date for wordpress:latest
docker.io/library/wordpress:latest

docker-compose的安装:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose#就一个文件,赋予权限即可运行,上面的命令是下载它到系统的path路径了,因此不要疑惑,赋权就可以使用了

编写编排文件,文件必须使用yaml语言编写(变态的格式对齐要求),因此任意名称都可以,后缀为yaml即可(为yml也可以),内容如下(我使用的名字为lamp.yaml):

version: "2.2"#docker-compose的版本,2.2 或者3  或者3.3都可以

services:#定义服务的地方
  db:#服务名称为db
    image: hub.c.163.com/library/mysql#使用的镜像名称,通过docker images 命令可以查到
    volumes:
      - db_data:/var/lib/mysql#该MySQL使用的存放数据库的路径,注意,这个路径是镜像内的路径。
    restart: always#如果mysqldown了就尝试重启容器
    environment:
      MYSQL_ROOT_PASSWORD: P@ssW0rd#这个mysql服务的root密码
      MYSQL_DATABASE: wordpress#启动mysql后使用的数据库名称为wordpress,如果没有就立刻新建
      MYSQL_USER: wordpress#连接MySQL数据库使用的账号
      MYSQL_PASSWORD: wordpress123456#该账号的密码
  wordpress:#服务名称为WordPress
    depends_on:#WordPress关联上面的服务
      - db#关联的服务名称
    image: wordpress:latest#指定镜像名称
    ports:
      - "8000:80"#暴露端口,容器内的端口是80,对外端口是8000,可以任意修改,只要没被占用
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306#WordPress这个服务连接的服务
      WORDPRESS_DB_USER: wordpress#使用WordPress这个账号连接
      WORDPRESS_DB_PASSWORD: wordpress123456#这个账号的密码
volumes:
  db_data:#持久化到本地。

通过上面的文件启动容器,以提供服务:

[root@centos6 ~]# docker-compose -f lamp.yaml up -d
Creating network "root_default" with the default driver
Creating root_db_1 ... done
Creating root_wordpress_1 ... done

 

查看容器状态,可以看到两个容器都是up状态,端口也都暴露了,服务已经可以使用了。此时,局域网内任意浏览器连接容器+port即可安装并使用WordPress了。

[root@centos6 ~]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                  NAMES
1e663bd63a37        hub.c.163.com/library/mysql   "docker-entrypoint.s…"   9 seconds ago       Up 8 seconds        3306/tcp               root_db_1
ce0c57eba1ce        wordpress:latest              "docker-entrypoint.s…"   20 minutes ago      Up 18 seconds       0.0.0.0:8000->80/tcp   root_wordpress_1

本实验完美成功。

实验2:

postgres镜像仍然是从官方拉取(已下载过了)。

[root@centos7 ~]# docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
Digest: sha256:839d6212e7aadb9612fd216374279b72f494c9c4ec517b8e98d768ac9dd74a15
Status: Image is up to date for postgres:latest
docker.io/library/postgres:latest

查看镜像的状态:

[root@centos7 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
poster              v1.0                f51c55ac75ed        10 days ago         314MB
postgres            latest              f51c55ac75ed        10 days ago         314MB

 image id 可以看到,两个镜像是一致的,因为我改了tag。

编写镜像运行文件,名称任意,内容如下(我使用的名字为postgres.yaml):

version: '3'
services:
  db:
    restart: always
    image: f51c5 #可以使用镜像id前5位指定,也可以使用镜像名称+版本号的形式,就是postgres:latest
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: postgres #连接的密码pgadmin用的就是这个哦
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - /home/server/pg_data/data:/var/lib/postgresql/data/pgdata
#持久化的目录,:左侧是本地目录,右侧是容器的目录

根据以上文件启动容器:

[root@centos7 ~]# docker-compose -f postgres.yaml up -d
Creating root_db_1 ... done

查看容器状态:

[root@centos7 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
2ba7ff3a9b6d        f51c5               "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:5432->5432/tcp   root_db_1
[root@centos7 ~]# 

服务端口也是暴露的,status为up,(只有up是正常的,exit或者reboot等等是表示容器启动失败的。)

启动pgadmin,连接容器内的数据库:

数据库映射到了本地哦 

 

[root@centos7 data]# pwd
/home/server/pg_data/data
[root@centos7 data]# ll
total 60
drwx------ 5 polkitd ssh_keys    41 Nov 28 15:45 base
drwx------ 2 polkitd ssh_keys  4096 Nov 28 18:10 global
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_commit_ts
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_dynshmem
-rw------- 1 polkitd ssh_keys  4782 Nov 28 15:45 pg_hba.conf
-rw------- 1 polkitd ssh_keys  1636 Nov 28 15:45 pg_ident.conf
drwx------ 4 polkitd ssh_keys    68 Nov 28 18:05 pg_logical
drwx------ 4 polkitd ssh_keys    36 Nov 28 15:45 pg_multixact
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_notify
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_replslot
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_serial
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_snapshots
drwx------ 2 polkitd ssh_keys     6 Nov 28 16:17 pg_stat
drwx------ 2 polkitd ssh_keys    63 Nov 28 18:15 pg_stat_tmp
drwx------ 2 polkitd ssh_keys    18 Nov 28 15:45 pg_subtrans
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_tblspc
drwx------ 2 polkitd ssh_keys     6 Nov 28 15:45 pg_twophase
-rw------- 1 polkitd ssh_keys     3 Nov 28 15:45 PG_VERSION
drwx------ 3 polkitd ssh_keys    60 Nov 28 15:45 pg_wal
drwx------ 2 polkitd ssh_keys    18 Nov 28 15:45 pg_xact
-rw------- 1 polkitd ssh_keys    88 Nov 28 15:45 postgresql.auto.conf
-rw------- 1 polkitd ssh_keys 28043 Nov 28 15:45 postgresql.conf
-rw------- 1 polkitd ssh_keys    36 Nov 28 18:05 postmaster.opts
-rw------- 1 polkitd ssh_keys   101 Nov 28 18:05 postmaster.pid

实验目标圆满完成~~~~~~~~~