- 用例
- 将SpringBoot项目打包成.jar
- 写出dockerfile
- 当前文件夹下的dockerfile,制作名为springdemo的image
- 设定port 主机的8081端口对应docker容器的8080端口,使用springdemo的image,进入bash
- 安装docker
- 卸载老旧的版本(若未安装过可省略此步)
- 安装最新的docker
- shell会提示你输入sudo的密码,然后开始执行最新的docker过程
- https://get.docker.com/ | sh">或者 curl -sSL https://get.docker.com/ | sh
- 确认Docker成功最新的docker
- 1、进入yum的repos目录
- 2、修改所有的CentOS文件内容
- nginx
- podman
- k8s
2019/09/05 15:30 init 20220703 添加 docker-compose/dockerfile/FAQ部分
- docker更新镜像源
- docker image无状态的还是有状态的?
概念:
- image
- volume
- Dockerfile
- stage
- docker-compose
用例
- 其他:windows下的docker Desktop使用体验仍然堪忧;而且虚拟机(VMware或者Virtualbox)无法与HyperV同时使用;会出现问题“VMware Workstation 与 Device/Credential Guard 不兼容“
```bash
将SpringBoot项目打包成.jar
写出dockerfile
当前文件夹下的dockerfile,制作名为springdemo的image
docker image build -t springdemo .
设定port 主机的8081端口对应docker容器的8080端口,使用springdemo的image,进入bash
docker container run -p 8081:8080 -it springdemo bash
<br />常用命令:```bashnetstat -nltp | grep 10088 # 查看端口占用sudo docker stop $containerNamesudo docker logs $containerNamesudo docker attach $containerNameOrHash # 进入容器
- 查看全部镜像:docker images
- 查看全部容器:docker ps -a
- 删除镜像:docker rmi
- eg: 使用nginx
docker run --name=my_nginx -v /home/hit/mnt_folder/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/hit/mnt_folder/nginx/conf.d:/etc/nginx/conf.d -v /home/hit/mnt_folder/resource:/u01/resource -p 8000:80 -d nginx - 配置:systemctl enable docker 设置docker开机启动
docker的三种网络模式
- 桥接:docker容器默认是桥接的,容器和主机通过docker0网口通信;
- 主机的ip和容器的ip,networking - How to access host port from docker container? - Server Fault;How to access host port from docker container - Stack Overflow
- 在调试网络问题的时候,docker容器基本什么工具都没有,应先apt-get update;再装net,inetutils-ping
- 可以切换成仅主机,容器和主机的localhost都一样;
- docker的—link=
:,只能用于容器 - docker exec -it
bash 安装docker
```bash卸载老旧的版本(若未安装过可省略此步)
sudo apt-get remove docker docker-engine docker.io
安装最新的docker
curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh
shell会提示你输入sudo的密码,然后开始执行最新的docker过程
或者 curl -sSL https://get.docker.com/ | sh
确认Docker成功最新的docker
sudo docker run hello-world
<a name="Rjsil"></a>## 安装docker-compose- [docker-compose教程(安装,使用, 快速入门)_pushiqiang的博客-CSDN博客_docker-compose](https://blog.csdn.net/pushiqiang/article/details/78682323)
sudo curl -L https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-`uname -s-uname -m` -o /usr/local/bin/docker-compose
常用命令```bashsudo docker-compose up -d --build # 打开当前文件夹下配置的容器并进行buildsudo docker-compose down # 关闭当前文件夹下配置的容器
volume
写dockerfile
- multi-stage build — 多阶段构建;
- 官方文档 Use multi-stage builds | Docker Documentation
- 使用多阶段构建可以减小镜像的体积;两个奇技淫巧,将 Docker 镜像体积减小 99% - 知乎
- Dockerfile多阶段构建之from==0 - momingliu11 - 博客园
FAQ
- docker /bin/bash not found
- 可能这个镜像没有安装bash
- docker /bin/sh not found
- Docker运行报错”/bin/sh ./run.sh: not found”
- 使用docker-compose运行的docker镜像内运行可执行程序提示找不到文件:go - Executable not found in docker compose /bin/sh: 1: main: not found - Stack Overflow
- 在 docker-compose.yaml 挂载的 volume 会覆盖挂载到的位置的文件;
- 使用多阶段构建时注意
- 使用centos镜像的问题:问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist:…_看,未来的博客-CSDN博客
2、修改所有的CentOS文件内容
sed -i ‘s/mirrorlist/#mirrorlist/g’ /etc/yum.repos.d/CentOS- sed -i ‘s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g‘ /etc/yum.repos.d/CentOS-
yum install xxx -y ```
- 使 docker 容器持续运行;
- Docker Compose keep container running - Stack Overflow
- docker容器中至少要有一个持续运行的进程,否则会一直restarting
- 可以在Dockerfile 中添加
tty: true - 也可以在docker run之后加上bash,使其进入bash;使用 docker run -d 等
nginx
- 很详细的配置文件说明Nginx之(三)Nginx配置 - 冰河 - CSDN博客
- 查看日志:一般要看一下nginx.conf, 里面写着;如果是docker的nginx镜像,日志默认软链接到stdout和stderr,注意运行的时候不加-d,否则看不到;
- 设置日志格式和内容:可以用log_form定义:Nginx 日志文件 access_log 详解 - joshua317 - 博客园
- 注意查看nginx.conf里面有没有module-,sites- 被引进来,这些设置如果出现在conf.d/default.conf后面可能会把写在里面的内容覆盖掉;(耗了2h+)
