命令吃瓜总结

Docker 命令吃瓜总结

-docker容器php执行单个文件

docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp php:7.4-cli php your-script.php

  • 列出所有镜像
docker images

  • 列出正在运行的容器
docker ps 

  • 列出所有容器包括未运行的和正在运行的
docker ps -a  

  • 进入容器
docker exec -it [id号] bash

  • 推出镜像
 exit  

  • 强制删除容器
docker rm -f [id号]    

  • 删除容器
docker rm [id号]  

  • 提交容器
docker commit [id号]

  • 指定端口运行m1 相当于docker create + docker start
docker run -d -p 90:90 m1 

  • 获取一台或多台计算机的IP地址
docker-machine ip 

  • 指定机器哪台机器
docker-machine ip dev dev2 

  • 列出信息运行状态 virtualbox Running tcp://192.168.99.100:2376 v19.03.5
docker-machine ls  

  • [仓库名称]创建一个未启动的容器
docker create [REPOSITORY]  

  • 启动容器
docker start [容器id] 

  • 停止一个容器进程
docker kill [容器id] 

  • 容器名
docker stop  [容器id]

  • 进入容器的命令行
docker exec -it [容器id] bash   

  • 查看容器相关信息(返回一个json)
docker inspect [容器id]   

  • 启动一个数据库
docker run -itd --name [NAMES] -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 [IMEGE] 

docker端口13306 容器端口3306 --name就是给容器取个名字叫mysql, -e就是设置容器里的环境变量,我们设置了mysql的密码环境变量,这个变量会传入容器里面来设置mysql的密码, -d就是把容器运行在后台,后面加的就是镜像的名字了

docker run --name mysql-data -v [属主机路径]:[容器路径] -e MYSQL_ROOT_PASSWORD="123456" -d mysql:5.6.46

-v的意思就是把容器中的目录和宿主机中的目录做映射 可以映射多个路径

  • 数据库持久化

mysql持久化

docker run -v /mysql:/var/lib/mysql -itd --name mysqlstart -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.18

mongodb持久化

docker run --name mongo -v mongo:/data/db --rm -d -p 27017:27017 mongo

启动一个mongodb

docker run -itd --name mongo -p 27017:27017 mongo --auth

  • 运行一个php项目
docker run --name  myphp-fpm -v /nginx/www:/www  -itd  phpdockerio/php7-fpm:latest
docker run --name runoob-php-nginx -it -p 8083:80 -d -v /nginx/www:/usr/share/nginx/html:ro -v /nginx/conf/conf.d:/etc/nginx/conf.d:ro     --link myphp-fpm:php nginx

-p 8083:80: 端口映射,把 nginx 中的 80 映射到本地的 8083 端口。

~/nginx/www: 是本地 html 文件的存储目录,/usr/share/nginx/html 是容器内 html 文件的存储目录。

~/nginx/conf/conf.d: 是本地 nginx 配置文件的存储目录,/etc/nginx/conf.d 是容器内 nginx 配置文件的存储目录。

--link myphp-fpm:php: 把 myphp-fpm 的网络并入 nginx,并通过修改 nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,让 nginx 通过 php:9000 访问 php-fpm。

  • window下查看docker配置信息
docker-machine env default 

  • yapi启动
docker run -d --name mongo-yapi -v mongo_data_yapi:/data/db mongo:latest

初始化 Yapi 数据库索引及管理员账号
docker run -it --rm  --link mongo-yapi:mongo  --entrypoint npm  --workdir /api/vendors  registry.cn-hangzhou.aliyuncs.com/anoy/yapi  run install-server

docker run -d  --name yapi  --link mongo-yapi:mongo  --workdir /api/vendors  -p 3000:3000  registry.cn-hangzhou.aliyuncs.com/anoy/yapi  server/app.js



Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看:
docker network ls 
    none模式,使用--net=none指定,该模式关闭了容器的网络功能。
    host模式,使用--net=host指定,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
    bridge模式,使用--net=bridge指定,默认设置 ,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。
    container模式,使用--net=container:NAME_or_ID指定,创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
    none 网络
只能访问本地网络,没有外网。挂在这个网络下的容器除了 lo,没有其他任何网卡。容器创建时,可以通过 --network=none 指定使用 none 网络。
    host 网络
    连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。可以通过 --network=host 指定使用 host 网络。
    直接使用 Docker host 的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择 host 网络。当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host 上已经使用的端口就不能再用了。
    Docker host 的另一个用途是让容器可以直接配置 host 网路。比如某些跨 host 的网络解决方案,其本身也是以容器方式运行的,这些方案需要对网络进行配置,比如管理 iptables。
    bridge 网络
    Docker 安装时会创建一个 命名为 docker0 的 linux bridge。如果不指定--network,创建的容器默认都会挂到 docker0 上
    brctl show #查看bridge网络  yum install bridge-utils
    docker network inspect bridge   #查看bridge 网络的详细信息

docker-machine env default  #window下查看配置信息

docker cp mysqldock:/var/lib/mysql /var/own/mysqldata  docker 将数据库得某一个文件拷贝到本地

等待分析命令

docker run --name wordpress-data --link mysql-data:mysql -p 8080:80 -d wordpress:4.9.5-php5.6-apache  启动一个php项目

docker-machine ssh default 进入虚拟机
docker build -t m2  构建容器
docker run -itd --name mysql-test -p 3306:13306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.46 
-p 3306:13306  映射容器服务的3306端口到属主机的3306
 docker exec -it mongo mongo admin
docker run -itd --name mongo -p 27017:27017 mongo --auth
docker save m2 >1.tar  保存
docker rmi m2 删除镜像

docker run -d --name nginx1.0 hub.c.163.com/library/nginx    # -d: 后台启动容器; --name:容器的别名,默认为随机的
docker ps -l      # 查看最近一次运行的容器
docker attach 容器名或者容器ID bash     # 进入容器的命令行(退出容器后容器会停止)

docker exec -it --user root <container id> /bin/bash  #如何进入docker 使用root用户的方式

mysql错误:this authentication plugin is not supported - CSDN博客 http://keep.01ue.com/?pi=333075&_a=app&_c=index&_m=popen in new window

this authentication plugin is not supported

应用程序连接mysql docker一直报错:this authentication plugin is not supported。 google发现,原来是mysql新版本(8.0以上)将root用户使用的plugin更新成caching_sha2_password。 登录mysql输入如下命令可以看到:

mysql> select user,plugin from mysql.user;
+------------------+-----------------------+
| user             | plugin                |
+------------------+-----------------------+
| root             | caching_sha2_password |
| mysql.infoschema | mysql_native_password |
| mysql.session    | mysql_native_password |
| mysql.sys        | mysql_native_password |
| root             | caching_sha2_password |
+------------------+-----------------------+

解决办法有: (1)降级,使用老版本mysql。 (2)将root的plugin改成mysql_native_password。 这里改成:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

这行代码有两层含义,第一:修改root的密码为'root',摒弃原来的旧密码。第二:使用mysql_native_password对新密码进行编码。

然后再启动应用,还是一样报错。再看mysql.user,发现还有一个host"%"的root用户:



mysql> select host,user,plugin from mysql.user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | caching_sha2_password |
| localhost | mysql.infoschema | mysql_native_password |
| localhost | mysql.session    | mysql_native_password |
| localhost | mysql.sys        | mysql_native_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+
5 rows in set (0.00 sec)

将这个用户也改了: ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; 再看:



mysql> select host,user,plugin from mysql.user;
+-----------+------------------+-----------------------+
| host      | user             | plugin                |
+-----------+------------------+-----------------------+
| %         | root             | mysql_native_password |
| localhost | mysql.infoschema | mysql_native_password |
| localhost | mysql.session    | mysql_native_password |
| localhost | mysql.sys        | mysql_native_password |
| localhost | root             | mysql_native_password |
+-----------+------------------+-----------------------+

改成功了,再启动应用,报错: this user requires mysql native password authentication 在连接mysql的url上加上?allowNativePasswords=true,这次正常了。

Last Updated:
Contributors: 刘荣杰