Docker~


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安装

  1. 下载地址:https://hub.docker.com/editions/community/docker-ce-desktop-windows
  2. 安装Hyper-V 家庭版安装
  3. 安装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

  1. 创建项目,添加docker支持,会生成一个Dockerfile的文件,把Dockerfile移动到上一层目录;
  2. 编译.NetCore,会生成一个net镜像:docker build -t dotnetdocker .
  3. 运行容器:docker run --name=dotnetdocker -p 8000:80 dotnetdocker
  4. 再用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学习手册