四、管理容器常用命令
4.1、删除容器和镜像
#删除所有容器
docker stop $(docker ps -a -q);docker rm $(docker ps -a -q)
#删除所有镜像
[root@ansible-server ~]# docker rmi -f `docker images -q`
4.2、进入容器
法一:
[root@ansible-server ~]# docker exec -it nginx02 bash
root@ea65f58c0e55:/# exit
法二:
[root@ansible-server ~]# docker exec -it nginx02 sh
# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
法三:
[root@ansible-server ~]# docker run -it centos /bin/bash
4.3、commit :把容器打包成镜像
#下载镜像
[root@ansible-server ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8ba884070f61: Pull complete
Digest: sha256:b40cee82d6f98a785b6ae35748c958804621dc0f2194759a2b8911744457337d
Status: Downloaded newer image for centos:latest
[root@ansible-server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 9f38484d220f 2 months ago 202MB
#进入镜像
[root@ansible-server ~]# docker run -it centos /bin/bash
#在容器中安装vim
[root@2ffc3f732d99 /]# yum install vim -y
[root@2ffc3f732d99 /]# exit
#查看容器
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1e98c693e84 centos "/bin/bash" 49 seconds ago Up 46 seconds dreamy_dirac
#把容器打包成镜像:
[root@ansible-server ~]# docker commit c1e98c693e84 centos-vim
sha256:8377fdf51ec1d46dbb79e96a73e47d72c4be2c4f51ba23969ecea23d0a22b3a8
#查看镜像
[root@ansible-server ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-vim latest 8377fdf51ec1 5 seconds ago 202MB
centos latest 9f38484d220f 2 months ago 202MB
4.4、把文件从电脑中拷贝到容器中
#查看容器
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1e98c693e84 centos "/bin/bash" 9 minutes ago Up 9 minutes dreamy_dirac
#查看需要拷贝的文件
[root@ansible-server ~]# ll
total 294828
-rw-r--r--. 1 root root 2656 May 18 16:26 nginx.conf
#拷贝文件到容器中
[root@ansible-server ~]# docker container cp nginx.conf dreamy_dirac:/root
#进入容器查看,是否有拷贝过来的文件
[root@ansible-server ~]# docker container exec dreamy_dirac ls /root
anaconda-ks.cfg
nginx.conf<br><br>#在容器中的文件重启也不会丢失
[root@ansible-server ~]# docker restart dreamy_dirac dreamy_dirac
4.5、查看容器日志
#下载并运行容器
[root@ansible-server ~]# docker container run -itd -p 8080:80 --name nginx02 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
743f2d6c1f65: Pull complete
6bfc4ec4420a: Pull complete
688a776db95f: Pull complete
Digest: sha256:0e409e180983aea7972c92b0a8ae538d1d3c802fe3a8f795ad8049951894590a
Status: Downloaded newer image for nginx:latest
7d5b76c0f8b20038eac1449daba79ded2da7ec41f448ca02252fda877f2ffa9a
#查看容器
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d5b76c0f8b2 nginx "nginx -g 'daemon of…" 29 seconds ago Up 26 seconds 0.0.0.0:8080->80/tcp nginx02
c1e98c693e84 centos "/bin/bash" 20 minutes ago Up 4 minutes dreamy_dirac
#访问容器的nginx
[root@ansible-server ~]# curl 59.47.71.229:8080
<!DOCTYPE html>
<html>
<body>
<h1>Welcome to nginx!</h1>
</body>
</html>
#查看容器日志
[root@ansible-server ~]# docker logs nginx02
59.47.71.229 - - [23/May/2019:08:32:34 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
59.47.71.229 - - [23/May/2019:08:32:35 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
4.6、查看容器负载情况
[root@ansible-server ~]# docker stats nginx02
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
7d5b76c0f8b2 nginx02 0.00% 1.371MiB / 3.693GiB 0.04% 1.83kB / 2.46kB 0B / 0B 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
7d5b76c0f8b2 nginx02 0.00% 1.371MiB / 3.693GiB 0.04% 1.83kB / 2.46kB 0B / 0B 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
7d5b76c0f8b2 nginx02 0.00% 1.371MiB / 3.693GiB 0.04% 1.83kB / 2.46kB 0B / 0B 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
7d5b76c0f8b2 nginx02 0.00% 1.371MiB / 3.693GiB 0.04% 1.83kB / 2.46kB 0B / 0B 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
7d5b76c0f8b2 nginx02 0.00% 1.371MiB / 3.693GiB 0.04% 1.83kB / 2.46kB 0B / 0B 2
4.7、查看容器的端口
[root@ansible-server ~]# docker port nginx02
80/tcp -> 0.0.0.0:8080
4.8、update
[root@ansible-server ~]# docker update --help
Usage: docker update [OPTIONS] CONTAINER [CONTAINER...]
Update configuration of one or more containers
Options:
--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0
to disable (default 0)
--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period
--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota
--cpu-rt-period int Limit the CPU real-time period in microseconds
--cpu-rt-runtime int Limit the CPU real-time runtime in microseconds
-c, --cpu-shares int CPU shares (relative weight)
--cpus decimal Number of CPUs
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--kernel-memory bytes Kernel memory limit
-m, --memory bytes Memory limit
--memory-reservation bytes Memory soft limit
--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable
unlimited swap
--restart string Restart policy to apply when a container exits
示例:
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d5b76c0f8b2 nginx "nginx -g 'daemon of…" 22 minutes ago Up 22 minutes 0.0.0.0:8080->80/tcp nginx02
c1e98c693e84 centos "/bin/bash" 42 minutes ago Up 26 minutes dreamy_dirac<br><br>#设置容器重启策略
[root@ansible-server ~]# docker update --restart=always 7d5b76c0f8b2
7d5b76c0f8b2
五、Volume(数据卷)
5.1、将Docker主机数据挂载到容器
1、保证容器中的数据不丢失
2、原来容器中的数据,不能容器挂了,数据就拿不出来了。
挂载数据的三种方式:
1、volumes (常用)
[root@ansible-server ~]# ls /var/lib/docker/volumes/metadata.db
#查看帮助
[root@ansible-server ~]# docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
2、bind mounts (常用)
挂载在宿主机上面
3、tmpfs (不常用)
tmpfs是一种基于内存的文件系统,也叫临时文件系统,tmpfs可以使用RAM,也可以使用swap分区存储。它并不是一个块设备,只要安装就可以使用。是基本RAM的文件系统。
5.2、创建挂载卷,并挂载到容器中
#创建卷
[root@ansible-server ~]# docker volume create nginx-vo1
nginx-vo1
#卷存储位置
[root@ansible-server ~]# docker volume ls
DRIVER VOLUME NAME
local nginx-vo1
#查看卷的详细信息
[root@ansible-server ~]# docker volume inspect nginx-vo1
[
{
"CreatedAt": "2019-05-23T17:09:33+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vo1/_data",
"Name": "nginx-vo1",
"Options": {},
"Scope": "local"
}
]
#挂载卷
语法:
docker run -itd, nginx的名称,--mount src=挂载的数据卷, dst=nginx网站的根目录
[root@ansible-server ~]# docker run -itd --name=nginx-test --mount src=nginx-vo1,dst=/usr/share/nginx/html nginx
ef9087684fb9ffe8775895215e0bbb13d1a8ad39f5b30c93a171213522df10c5
#查看容器
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ef9087684fb9 nginx "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 80/tcp nginx-test
7d5b76c0f8b2 nginx "nginx -g 'daemon of…" 45 minutes ago Exited (0) 22 minutes ago nginx02
c1e98c693e84 centos "/bin/bash" About an hour ago Up About an hour dreamy_dirac
#进入容器
[root@ansible-server ~]# docker exec -it nginx-test bash
root@ef9087684fb9:/#
#进入nginx网站根目录
root@ef9087684fb9:/# cd /usr/share/nginx/html/
#创建一个文件
root@ef9087684fb9:/usr/share/nginx/html# touch 1.html
root@ef9087684fb9:/usr/share/nginx/html# ls
1.html 50x.html index.html
#查看容器外面宿主机目录中是否有这几个文件(备注:再开一个终端)
[root@ansible-server ~]# cd /var/lib/docker/volumes/nginx-vo1/_data/
[root@ansible-server _data]# ls
1.html 50x.html index.html
[root@ansible-server _data]# exit
5.3、演示容器删除了,数据卷的数据还在
(备注:如果在容器中删除了数据,那么本地也会跟着删除)
#创建10个文件
root@ef9087684fb9:/usr/share/nginx/html# touch {1..10}.txt
root@ef9087684fb9:/usr/share/nginx/html# ls
1.txt 10.txt 2.txt 3.txt 4.txt 5.txt 50x.html 6.txt 7.txt 8.txt 9.txt index.html
root@ef9087684fb9:/usr/share/nginx/html# exit
exit
#删除所有容器
[root@ansible-server ~]# docker rm -f $(docker ps -q -a)
ef9087684fb9
7d5b76c0f8b2
c1e98c693e84
#查看容器
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#查看数据卷
[root@ansible-server _data]# cd /var/lib/docker/volumes/nginx-vo1/_data
[root@ansible-server _data]# ls
10.txt 1.txt 2.txt 3.txt 4.txt 50x.html 5.txt 6.txt 7.txt 8.txt 9.txt index.html
5.4、运行容器,增加端口,再通过本地数据卷中写入一个a.html的文件。再用浏览器访问他看是否可以打开
#再运行容器,增加端口
[root@ansible-server ~]# docker run -itd --name=nginx-test -p 8080:80 --mount src=nginx-vo1,dst=/usr/share/nginx/html nginx
7c82062a7435997717a938a252684ee5832caafe089d97ebf3948010951ae18a
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c82062a7435 nginx "nginx -g 'daemon of…" 4 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp nginx-test
#容器数据卷存储目录
[root@ansible-server _data]# cd /var/lib/docker/volumes/nginx-vo1/_data
[root@ansible-server _data]# ls
10.txt 1.txt 2.txt 3.txt 4.txt 50x.html 5.txt 6.txt 7.txt 8.txt 9.txt index.html
#创建一个html的文件
[root@ansible-server _data]# vi a.html
<h>welcome nulige</n>
#通过浏览器进行访问
http://59.47.71.229:8080/a.html
返回结果:
welcome nulige
5.5、实现数据卷共享他们的数据
#数据卷可以共享他们的数据
[root@ansible-server ~]# docker run -itd --name=nginx-test -p 8080:80 --mount src=nginx-vo1,dst=/usr/share/nginx/html nginx
7c82062a7435997717a938a252684ee5832caafe089d97ebf3948010951ae18a
#本地数据卷目录
[root@ansible-server _data]# cd /var/lib/docker/volumes/nginx-vo1/_data
[root@ansible-server _data]# ls
50x.html index.html
#创建一个文件
[root@ansible-server _data]# vi a.html
<h>welcome nulige</n>
#查看文件
[root@ansible-server _data]# ls
50x.html a.html index.html
#通过再创建一个容器,共享上面这个数据卷。实现了数据共享,多个nginx服务都访问同一个数据卷。这里有点像nginx访问nfs共享文件夹的功能。
[root@ansible-server ~]# docker run -itd --name=nginx-test02 -p 8081:80 --mount src=nginx-vo1,dst=/usr/share/nginx/html nginx
6e984d5e99a43487e616e92d75a9e9c57c4da3a0d7f0833c37f46072c3673970
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e984d5e99a4 nginx "nginx -g 'daemon of…" 16 seconds ago Up 14 seconds 0.0.0.0:8081->80/tcp nginx-test02
7c82062a7435 nginx "nginx -g 'daemon of…" 43 minutes ago Up 43 minutes 0.0.0.0:8080->80/tcp nginx-test
5.6、没有指定数据卷,他默认会创建数据库
#没有指定数据卷,他默认会自动创建数据卷
卷分类:
一种是:命名卷,自己指定的卷
一种是:匿名卷,系统默认创建的卷
<br>#创建匿名卷
[root@ansible-server ~]# docker run -itd --name=nginx-test03 -p 8082:80 --mount src=,dst=/usr/share/nginx/html nginx bcbdee85ae6d005971649a802484dacc8b6aca6f96adf70ef4c4ba3dab32bee9 <br>#查看卷
[root@ansible-server ~]# docker volume ls
DRIVER VOLUME NAME
local 92dbb978ec9d767fee49b1cdb440cd45ada36feb42b064132ba152150780fe67 #匿名卷
local nginx-vo1 #命名卷
5.7、通过bind挂载数据卷
示例:
#删除容器
[root@ansible-server ~]# docker rm -f $(docker ps -q -a)
bcbdee85ae6d
6e984d5e99a4
7c82062a7435
#绑定系统中已经存在的卷,src=app,这个目录必须存在,否则会报错
加参数:type=bind
先创建一个文件夹
[root@ansible-server ~]# mkdir -p /app/wwwroot
再绑定到这个文件夹中
[root@ansible-server ~]# docker run -itd --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
02c1bdaab564b3add7bbe0ac9b289e616e4bc40c965ff9824188bb99ed1fccb2
[root@ansible-server ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
02c1bdaab564 nginx "nginx -g 'daemon of…" 5 seconds ago Up 3 seconds 80/tcp nginx-test
#进入容器
[root@ansible-server ~]# docker exec -it nginx-test bash
#查看mount是否挂载到/usr/share/nginx/html目录
root@02c1bdaab564:/# mount
overlay on / type overlay (rw,relatime,seclabel,lowerdir=/var/lib/docker/overlay2/l/3QG6SC3NFVC6UJJQNVQGSHSCJV:/var/lib/docker/overlay2/l/IDJTHZBOQVLBQ7TISUNIWAAKS4:/var/lib/docker/overlay2/l/57TQY5XX7CMEROHBTYSQYNQTFY:/var/lib/docker/overlay2/l/FBBYWNRKKGDXOBECYPD3KFPUZN,upperdir=/var/lib/docker/overlay2/e7815303046019f7b9a48c1b1549bd46d25a5011aded5c61a4ca11620880f91d/diff,workdir=/var/lib/docker/overlay2/e7815303046019f7b9a48c1b1549bd46d25a5011aded5c61a4ca11620880f91d/work)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev type tmpfs (rw,nosuid,seclabel,size=65536k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=666)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime,seclabel)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,relatime,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/perf_event type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/blkio type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/memory type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/devices type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,devices)
cgroup on /sys/fs/cgroup/pids type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/freezer type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (ro,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime,seclabel)
/dev/mapper/centos-root on /etc/resolv.conf type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/hostname type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/centos-root on /etc/hosts type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,seclabel,size=65536k)
/dev/mapper/centos-root on /usr/share/nginx/html type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
devpts on /dev/console type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=666)
proc on /proc/bus type proc (ro,relatime)
proc on /proc/fs type proc (ro,relatime)
proc on /proc/irq type proc (ro,relatime)
proc on /proc/sys type proc (ro,relatime)
proc on /proc/sysrq-trigger type proc (ro,relatime)
tmpfs on /proc/acpi type tmpfs (ro,relatime,seclabel)
tmpfs on /proc/kcore type tmpfs (rw,nosuid,seclabel,size=65536k,mode=755)
tmpfs on /proc/keys type tmpfs (rw,nosuid,seclabel,size=65536k,mode=755)
tmpfs on /proc/timer_list type tmpfs (rw,nosuid,seclabel,size=65536k,mode=755)
tmpfs on /proc/timer_stats type tmpfs (rw,nosuid,seclabel,size=65536k,mode=755)
tmpfs on /proc/sched_debug type tmpfs (rw,nosuid,seclabel,size=65536k,mode=755)
tmpfs on /proc/scsi type tmpfs (ro,relatime,seclabel)
tmpfs on /sys/firmware type tmpfs (ro,relatime,seclabel)
#备注:通过bind挂载的容器,他会隐藏掉文件夹下面的内容
root@02c1bdaab564:/# cd /usr/share/nginx/html/
root@02c1bdaab564:/usr/share/nginx/html# ls
#再开一个终端
[root@ansible-server _data]# cd /app/wwwroot/
#往里面写入点内容
[root@ansible-server wwwroot]# echo "<h>welcome nulige </h>" >index.html
[root@ansible-server wwwroot]# cat index.html
<h>welcome nulige</h>
#再到容器中查看
[root@ansible-server ~]# docker exec -it nginx-test bash
root@02c1bdaab564:/# cd /usr/share/nginx/html/
root@02c1bdaab564:/usr/share/nginx/html# ls
index.html
root@02c1bdaab564:/usr/share/nginx/html# cat index.html
<h>welcome nulige </h>
#bind的应用场景
1、用在tomcat的部署中,直接生成jar包,挂载到部署目录中。
ls target/xxx.war jar
六、应用案例
6.1、搭建LNMP网站平台实战
一、搭建LNMP网站平台(nginx+php+mysql)
1、创建网络
[root@ansible-server ~]# docker network create lnmp
#查看网络
[root@ansible-server ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
b892a0991d9d bridge bridge local
f5f547cc8686 host host local
35b5589b014b lnmp bridge local
a480fd78ff5a none null local
2、创建Mysql数据库容器
docker run -itd \
--name lnmp_mysql \
--net lnmp \
-p 3306:3306 \
--mount src=mysql-vol,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql --character-set-server=utf8
#查看数据卷
[root@ansible-server ~]# docker volume ls
DRIVER VOLUME NAME
local 92dbb978ec9d767fee49b1cdb440cd45ada36feb42b064132ba152150780fe67
local mysql-vol
local nginx-vo1
#数据卷目录存放地址
[root@ansible-server ~]# ls /var/lib/docker/volumes/mysql-vol/_data/
auto.cnf ca-key.pem ib_buffer_pool ibtmp1 performance_schema server-key.pem
binlog.000001 ca.pem ibdata1 #innodb_temp private_key.pem sys
binlog.000002 client-cert.pem ib_logfile0 mysql public_key.pem undo_001
binlog.index client-key.pem ib_logfile1 mysql.ibd server-cert.pem undo_002
#查看lnmp_mysql日志
[root@ansible-server ~]# docker logs lnmp_mysql
#查看top
[root@ansible-server ~]# docker top lnmp_mysql
UID PID PPID C STIME TTY TIME CMD
polkitd 5896 5879 2 11:07 pts/0 00:00:08 mysqld --character-set-server=utf8
3、创建所需数据库
[root@ansible-server ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create database wordpress"'
#提示密码不安全
mysql: [Warning] Using a password on the command line interface can be insecure.
#查看数据库
[root@ansible-server ~]# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"123456" -h 59.47.71.229 -e "show databases;"'
mysql: [Warning] Using a password on the command line interface can be insecure.
Database
information_schema
mysql
performance_schema
sys
wordpress
4、创建PHP环境容器(备注:镜像中包括:nginx+php-fpm)
docker run -itd \
--name lnmp_web \
--net lnmp \
-p 88:80 \
--mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm
#查看容器
[root@ansible-server wordpress]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6de0d790b079 richarvey/nginx-php-fpm "docker-php-entrypoi…" 9 minutes ago Up 9 minutes 443/tcp, 9000/tcp, 0.0.0.0:88->80/tcp lnmp_web
cee253e2ef97 mysql "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp lnmp_mysql
5、以wordpress博客为例测试
wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
tar zxf wordpress-4.7.4-zh_CN.tar.gz -C /app/wwwroot
#查看解压文件
[root@ansible-server ~]# ls /app/wwwroot/
index.html wordpress
[root@ansible-server wordpress]# iptables -I INPUT -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
[root@ansible-server wordpress]# service iptables save
[root@ansible-server wordpress]# service iptables restart
6、浏览器测试访问
http://ip:88/wordpress
#访问后会跳转到
http://ip:88/wordpress/wp-admin/setup-config.php
#填写信息
完成!