ubuntu22下使用docker:
1>端口映射关系,也适用于直接docker run -p host_port:container_port
https://juejin.cn/s/docker-compose.yml%20%E7%AB%AF%E5%8F%A3
2>docker 命名卷
默认情况下,命名卷在大多数 Linux 发行版中存储在主机文件系统的 /var/lib/docker/volumes 目录下
比如:
volumes:
- volume-mysql-duoxiaozhan:/var/lib/mysql //声明 命名卷,然后挂载到 /var/lib/mysql,用来存储mysql数据,这样即使容器销毁数据还在
在 Linux 上: /var/lib/docker/volumes/volume-mysql-duoxiaozhan/_data
3>为docker-compose 配置环境变量
https://docs.docker.com/compose/environment-variables/set-environment-variables/
4>关于jwilder/nginx-proxy
http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/
5>现在可以直接使用 docker compose build , 过去需要使用 docker-compose build
对于新版 Docker(19.03+),只需安装 Docker Engine 即可使用 docker compose 命令
对于旧版 Docker,需要先安装 Docker Engine,再单独安装 docker-compose
还有一点很重要:
过去在当前 docker-compose.yml目录下执行 docker-compose up,如果镜像不存在,会自动执行 docker-compose build [可以加单独镜像名称,比如nginx]命令
现在必须要先执行 docker compose build [可以加单独镜像名称,比如nginx], 然后单独执行 docker compose up [-d参数], 使用 -d 标志启动容器,表示以"分离(detached)"模式运行。
分离模式意味着容器将在后台运行,而不会将它们的输出流(标准输出和标准错误)连接到您的终端。
6>执行 docker image ls,报下面的错误
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head ......
原因是:
这是因为你当前的用户没有这个权限。默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。即我们当前的用户不是root用户。
解决办法:把我们当前的用户添加到docker组中就可以了,这样他们就是一家人了。
第一步:sudo gpasswd -a username docker #将普通用户username加入到docker组中,username这个字段也可以直接换成$USER。
第二步:newgrp docker #更新docker组
第三步:再执行你报错的命令,此时就不会报错了。
7>docker 容器内执行vim
root@b8c739f8b2b3:/app# apt-get update
root@b8c739f8b2b3:/app# apt-get install -y vim
https://blog.csdn.net/hkl_Forever/article/details/125466251
8>docker容器内导入数据
root@bf42367264b4:/dumps# mysql -u duoxiaozhan -p duoxiaozhanpub_dev < /dumps/duoxiaozhanpub.sql
Enter password:
ERROR 1118 (42000) at line 1739814: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
解决方式:
找到对应表DML,把 ROW_FORMAT=COMPACT 改为 ROW_FORMAT=DYNAMIC:
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`editor_id` int unsigned DEFAULT NULL,
`email` char(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`password` char(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=2184475 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
至于网上的 各种设置都没用,其实就上面的提示就是解决方法
然后执行:
root@bf42367264b4:/dumps# ls
duoxiaozhanpub.sql tables
root@bf42367264b4:/dumps# mysql -u root -p duoxiaozhanpub_dev < /dumps/duoxiaozhanpub.sql
Enter password:
root@bf42367264b4:/dumps#
导入完成
补充:
https://blog.csdn.net/guo_zhen_qian/article/details/132254406 //命令行安装(简单)
https://docs.docker.com/desktop/install/linux-install/ //安装desk版本
https://docs.docker.com/engine/install/ubuntu/ //安装engine版本
// docker-compose 安装, 新版本的docker 可以不用单独安装这个,可以直接使用,见上面的命令操作
sudo curl -L https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
$ sudo chmod +x ./docker-compose //记得赋权限
