Docker~
发表于 · 归类于
技术 · 阅读完需 14 分钟 ·
阅读量 报告错误
Docker:就是一条船
在docker上运行nginx,然后把端口映射到宿主机,就可以直接访问宿主机的IP来访问docker
把本地文件映射到docker的相应目录,对docker进行操作
一、Docker安装
(1)Linux安装
安装docker yum install docker -y
启动docker systemctl start docker
下载nginx镜像 docker pull nginx
配置目录 ~/nginx/www
,编辑index.html
运行docker中的nginx docker run --name nd -p 80:80 -v ~/nginx/www:/usr/share/nginx/html -d nginx
docker run --name f1 -p 80:80 -v ~/html:/usr/share/nginx/html -v ~/nginx:/etc/nginx -d nginx:1.16.1
在宿主机访问80端口
docker查看容器的文件 docker exec f1 ls /etc/nginx/
从容器复制文件到宿主机 docker cp f1:/etc/nginx .
重启容器的nginx docker exec f2 service nginx reload
运行容器中的centos docker run -it centos
[root@template ~]# curl http://localhost/
<html>
这是一个网页
</html>
(2)Windows安装
- 下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows
- 安装Hyper-V 家庭版安装
- 安装WSL2 下载
二、Docker的使用
(1)常用命令
docker info #查看运行状态
docker search nginx #搜索版本
docker pull nginx:1.17.8 #安装最新版nginx
docker images #查看当前镜像
docker ps #查看当前运行的容器
docker inspect [image] #查看容器配置
docker inspect --format='{{.NetworkSettings.IPAddress}}' php74-6 #查看容器的IP
docker stop container
docker rm container
(2)容器操作
docker run --name nginx -p 9090:80 nginx:1.17.8 -d nginx
docker run --name yourname -d -p 8080:80 nginx:1.21.0
docker run --name baota -d -p 8888:8888 centos
(3)docker容器中安装vi命令
apt-get update
apt-get install vim
apt-get install iputils-ping #安装ping命令
https://www.cnblogs.com/wicub/p/6924018.html
(4)安装centos
docker pull centos
docker run --name yourname -idt -p 8888:8888 centos:latest
# yum update -y
# ...
//脚本优化
# yum install net-tools -y #安装ifconfig命令
# yum install vim -y #安装vim命令
# echo "alias ll= 'ls -l'" >> ~/.bashrc && source ~/.bashrc #安装ll命令
端口映射
docker run --name baota1 -idt -p 18888:8888 -p 10080:80 -p 13306:3306 -p 10443:443 -p 10022:22 centos:latest
(5)Docker部署php项目
docker pull php:7.4-fpm
# 普通PHP
docker run --name php74-3 -v "D:\phpEnv\www\d.fe80.cn\public":/var/www/html -idt -p 19011:9000 php:7.4-fpm
# ThinkPHP
docker run --name php74-6 -v "D:\phpEnv\www\d.fe80.cn":/var/www -v "D:\phpEnv\www\d.fe80.cn\public":/var/www/html -idt -p 19011:9000 php:7.4-fpm
宿主机Nginx的配置
location ~ [^/]\.php(/|$)
{
fastcgi_pass 127.0.0.1:19011;
fastcgi_index index.php;
include php/pathinfo.conf;
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; #需要这一行
}
PHP容器安装redis扩展
pecl install -o -f redis
echo "extension=redis.so" >> /usr/local/etc/php/conf.d/php.ini
docker-php-ext-enable redis
(6)部署MySQL
# docker pull mysql:latest
# docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=betapass -idt -p 3306:3306 mysql:latest
把目录映射到宿主机上
注意:使用docker部署MySQL数据库,需要把数据库文件映射到宿主机上,避免docker宕机导致数据丢失。
需要编写/docker/mysql/conf/my.cnf
配置文件
# mkdir /docker/mysql/{data,conf,logs}
# 把自定义配置的my.cnf写入到/docker/mysql/conf/my.cnf
# docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=betapass -idt -p 3306:3306 -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/data:/var/lib/mysql mysql:latest
解决only_full_group_by的报错问题
set global sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
set session sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
(7)部署Nginx
docker pull nginx:latest
docker run --name nginxweb -p 80:80 -v /www:/usr/share/nginx/html -d nginx
(8)安装MongoDB
docker pull mongo
docker run -itd --name mongo6docker -p 27017:27017 mongo --auth
$ docker exec -it mongo6docker mongo admin
$ docker exec -it mongo6docker /bin/mongosh admin //直接使用docker里面的命令
# 创建一个名为 admin,密码为 beta123456 的用户。
> db.createUser({ user:'root',pwd:'beta123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
> db.auth('root', 'beta123456')
# 把宿主机的文件复制到docker容器
docker cp . mongo4docker:/mongodata
# 恢复数据
docker exec -it mongo4docker /bin/mongorestore -h 127.0.0.1:27017 --db linzening -u root -p password0 --authenticationDatabase "admin" /mongodata
文件映射: -v /docker/mongo:/data/db
(9)部署.net core
- 创建项目,添加docker支持,会生成一个Dockerfile的文件,把Dockerfile移动到上一层目录;
- 编译.NetCore,会生成一个net镜像:
docker build -t dotnetdocker .
- 运行容器:
docker run --name=dotnetdocker -p 8000:80 dotnetdocker
- 再用Nginx反向代理到8000端口
三、docker-compose和Dockerfile
(1)docker-compose使用
安装docker-compose命令
curl -L "https://github.com/docker/compose/releases/download/1.29.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
docker-compose --version
文件名:docker-compose.yml
version: "2"
services:
mysql:
image: mysql:8.0.25
restart: always
command: --default-authentication-plugin=mysql_native_password
container_name: thinkcmf-db
environment:
- MYSQL_ROOT_PASSWORD=Root@123
- MYSQL_USER=thinkcmf
- MYSQL_PASSWORD=Thinkcmf@123
- MYSQL_DATABASE=thinkcmf
- TZ=Asia/Shanghai
volumes:
- /home/mysql:/var/lib/mysql
ports:
- "3306:3306"
- "80:80"
expose:
- 80
thinkcmf:
build: .
network_mode: service:mysql
restart: always
container_name: thinkcmf-web
depends_on:
- mysql
学习文档
史上最详细的docker学习手册