docker容器
容器概念
1.1 什么是容器
1.对外提供服务的实例(进程)
2.容器启动的必要条件:容器内至少有一个进程运行在前台
3.docker是一个进程隔离的软件,所运行的进程全部都运行在操作系统之上
4.一个容器内部只允许运行一个应用
1.2 运行镜像
# docker run :启动并创建一个容器
格式:
docker run [参数] [镜像名称] [cmd]
参数:
-d:以守护进程的方式运行一个容器
docker run -d [镜像名称] [cmd]
--name:指定容器的名称
docker run -d --name [容器名称] [镜像的名称] [cmd]
-p:指定端口映射
docker run -d -p 宿主主机端口:容器内端口 [镜像名称] [cmd]
-P:随机端口映射
docker run -d -P [镜像名称] [cmd]
-i:打开标准输出
-t:创建一个伪终端(搭配-i使用)
docker run -it [镜像名称] [cmd]
-v:挂载目录到容器中
docker run -v 宿主主机目录:容器内目录 [镜像名称] [cmd]
--rm:容器生命周期结束时立即删除
docker run --rm [镜像名称] [cmd]
-e:在容器中创建一个环境变量
docker run -e NAME=Centos -d [镜像名称] [cmd]
案列:
docker run -d -e MYSQL_ROOT_PASSWORD='123' --name=mysql mysql:5.7
--link:连接上一个容器,实先网络互通(单向连接)
docker run --link 被连接的容器的名称:连接别名 [镜像名称] [cmd]
# 注:连接别名最好与被连接的容器的名称一致
-h:设置容器主机名
docker run -h "主机名" [镜像名称] [cmd]
1.3 查看本机容器列表
# 格式:
docker ps [参数] # 查看当前系统中正在运行的容器列表
# 参数
-a:查看系统中所有的容器
-q:仅仅显示容器ID
# 常用搭配
docker rm -f $(docker ps -a -q) : 删除所有的容器
1.4 停止和启动一个容器
# 停止
docker stop [容器的ID|名称]
# 启动(该容器必须是系统已经存在的容器)
docker start [容器的ID|名称]
# 重启
docker restart [容器的ID|名称]
1.5 删除容器
# 格式
docker rm [容器名称|ID]
# 参数
-f:强制删除
docker rm -f [容器名称|ID]
1.6 复制
1.复制到容器内
docker cp [宿主主机文件路径] 容器ID:容器内路径
2.复制到容器外
docker cp 容器ID:容器内路径 [宿主主机文件路径]
1.7 日志
# 查看容器内部的日志
docker logs [容器名称|ID]
参数
-f:实施打印日志
1.8 进入容器
# 进入容器一般有四种方式
1. exec:在容器外向容器内执行一个命令(官方推荐)
格式:
docker exec [参数] [容器的名称|ID] [cmd]
2. attach : 通过进程管道连接上容器内部PID为1的进程(缺点:当其结束时,容器也跟着结束了)
格式:
docker attach [容器ID|名称]
3. nsenter : 建立一个管道连接上容器主ID
案列:
nsenter --target $( docker inspect -f {{.State.Pid}} hardcore_black ) --mount --uts --ipc --net --pid
4.ssh
docker搭建wordpress
# 创建映射文件
[root@docker ~]# mkdir /mnt/html
# 下载并解压wordpress安装包
[root@docker html]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
[root@docker html]# tar -xf latest-zh_CN.tar.gz
[root@docker html]# chmod -R 777 wp-content
# 启动MySQL容器
[root@docker html]# docker run -d -e MYSQL_ROOT_PASSWORD='123' --name=mysql mysql:5.6
45dc8e235ec8c11fa3631b2390640d9f9bba0c3942c7f10dc5a282382e724bfd
# 启动PHP容器映射/mnt/html目录并与MySQL容器建立单向连接
[root@docker html]# docker run -d -v /mnt/html/:/usr/share/nginx/html --link mysql:mysql --name php alvinos/php:v2-fpm-mysql
Unable to find image 'alvinos/php:v2-fpm-mysql' locally
v2-fpm-mysql: Pulling from alvinos/php
2d473b07cdd5: Pull complete
12c5e3dc1f87: Pull complete
8329a9b58dc5: Pull complete
84554aaafbc0: Pull complete
Digest: sha256:643e32613ac286ef1a0c93bf005535b8f8814fe2173a31853634ac3b2797db8b
Status: Downloaded newer image for alvinos/php:v2-fpm-mysql
8812b98963e087ab21daa13cce297cd5e80dcf157e7b878fd089971e5a86ef8d
# 启动nginx容器映射/mnt/html目录并与PHP容器建立单向连接
[root@docker ~]# docker run -d -P -v /mnt/html/:/usr/share/nginx/html --link php:php --name=nginx nginx
63d9ec17bfd56ce6bc5cdc98dc48b42716cbc3275b53e9e3f62c8c8c060cbcd2
# 修改配置文件
1.修改nginx.conf
[root@docker ~]# docker cp nginx:/etc/nginx/nginx.conf .
# 注:只需要修改用户为www
[root@docker ~]# docker cp nginx.conf nginx:/etc/nginx/nginx.conf
2.修改default.conf
[root@docker ~]# docker cp nginx:/etc/nginx/conf.d/default.conf .
[root@docker ~]# cat default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
root /usr/share/nginx/html;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@docker ~]# docker cp default.conf nginx:/etc/nginx/conf.d/default.conf
# 进入nginx容器创建用户并重启
[root@docker ~]# docker exec -it nginx bash
root@63d9ec17bfd5:/# useradd www
root@63d9ec17bfd5:/# nginx -s reload
2021/07/27 12:08:20 [notice] 63#63: signal process started