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
实验目标圆满完成~~~~~~~~~
原文链接:https://blog.csdn.net/alwaysbefine/article/details/110285867