Ubuntu ↑ Docker
1 Ubuntu 初始配置
sudo su
ufw allow ssh
ufw allow 22
apt update
apt install openssh-server -y #安装ssh # -y 确认安装
apt install vim -y #安装Vim
# 首先备份源列表
cp /etc/apt/sources.list /etc/apt/sources.list_backup
# 打开sources.list文件
vim /etc/apt/sources.list
阿里云源(18TLS)
# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
刷新列表
sudo su
apt-get update
apt-get upgrade
apt-get install build-essential
2 Ubuntu 安装 Docker
ubuntu server 安装 docker
sudo su
apt install docker.io -y
systemctl start docker #启动
systemctl enable docker #开机启动
3 Dockerfile 部署 SpringBoot
把 打包好的 jar文件(maven --> install), 放入以下文件中. (idea 右键jar–>Deployment–>上传) (Tools–>Deployment–>Configuration中配置 Deployment)
cd /home/springboot
mv -f /root/target/miaosha.jar /home/springboot/e
vim Dockerfile #如下 ↓ , 只需要修改 作者 和 SNAPSHOT.jar 部分. springboot由docker下载, 极速部署
# 基础镜像
FROM java:8
# 作者信息
MAINTAINER ngp1848e
# 将当前目录下的jar包复制到容器里(crm-0.0.1-SNAPSHOT.jar修改为你的jar包名字)
COPY crm-0.0.1-SNAPSHOT.jar /springboot.jar
# 提示当前项目在容器运行的端口
CMD ["========server.port = 8080=========="]
# 暴露运行的端口
EXPOSE 8080
# 执行jar包
ENTRYPOINT ["java","-jar","/springboot.jar"]
docker build -t springboot . #Dockerfile 生成镜像
- –tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
docker run -d -p 8090:8090 --name miaosha springboot
#端口号最好与程序内设置的端口一致, 内部写死了部分 链接, 很可能 跨域, 以后可能不是个问题. (以后进一步学习, 应该能够动态配置, 目前先这样)
Centos ↑ Docker
Centos 安装 Docker(可选)
yum install docker -y
附: docker 直接安装 MySQL(有数据卷的话, 重启没丢过数据, 生产环境目前不推荐此种简便方式)
-
临时练习用起来不错… 安装启动特方便
-
- 理由① 同程旅游也很早开始了 MySQL 的 Docker 化实践,到目前已经有超一千多个 MySQL 实例在 Docker 平台安全稳定地跑着,DB 运维能力发生了质的提高(DBA 再也不用担心删库跑路了)。
-
生产环境目前不推荐此种简便方式
如果 vmware中的ubuntu重启会丢失 docker所有镜像和容器, 是因为 ubuntu为live版server.iso 应换成普通server.iso
docker pull mysql:5.7
★ docker compose 启动 mysql容器
–> 替代 --> 修改docker中的MySQL的my.cnf
version: '3'
services:
mysql:
container_name: mysql57_main
image: mysql:5.7
restart: always
ports:
- 3306:3306
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=1024M
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
volumes:
- $PWD/mysql57/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "123456"
#版本5.7 挂载my.cnf配置文件, 就不能启动, 莫名... 算了先用着
version: '3'
services:
mysql8.0:
# 镜像名
image: mysql:8.0.21
# 容器名(以后的控制都通过这个)
container_name: mysql8.0_main
# 重启策略
restart: always
environment:
# 时区上海
TZ: Asia/Shanghai
# root 密码
MYSQL_ROOT_PASSWORD: 123456
# 初始化数据库(后续的初始化sql会在这个库执行)
MYSQL_DATABASE: nacos_config
# 初始化用户(不能是root 会报错, 后续需要给新用户赋予权限)
MYSQL_USER: nacos
# 用户密码
MYSQL_PASSWORD: nacos
# 映射端口
ports:
- 3306:3306
volumes:
# 数据挂载
- /root/mysql/data/:/var/lib/mysql/
# 配置挂载
- /root/mysql/conf/:/etc/mysql/conf.d/
# 初始化目录挂载
- /root/mysql/init/:/docker-entrypoint-initdb.d/
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
# 版本8.0
然后同目录下 docker-compose up -d
其配置简单, 替代频繁写入my.cnf
上传至服务器, 准备好镜像的情况下, 在 docker-compose.yml 同目录下, 命令: docker-compose up (即可启动, 自定义配置的mysql)
多个services则是 docker-compose all
命令行启动 mysql容器
# 推荐用 docker-compose.yml 启动容器, 因为手写or复制很容易出错, 且不便于改动/备份版本
# docker run --name mysql5.7 \
# $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql
# -v /mysql/conf:/etc/mysql/conf.d -v /mysql/logs:/logs -v /mysql/data:/var/lib/mysql \
# -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 # 目前来说这个稳妥
推荐docker-compose 方式
-id–>交互式容器,
–name–>容器名字,
-p host_port:container_port -->[宿主机端口] 映射到 [容器端口],
-e–>指定参数
-v : 指定数据卷,意思就是将mysql容器中的/var/lib/mysql(这个是数据库所有数据信息文件)映射到宿主机/data/mysql里面
附: 解决跨域
Chrome 查看 Application/Cookies(即Session?)时, JSESSIONID 服务器端 不存在, 而本地存在, 判断是跨域问题.
-
但之前视频里用 前后端所有交互的页面 Credentials 设置一遍解决了呀.
-
后来, 想用redis替代session失败, 需要一段时间学习, 待补充知识点
-
后来, 仔细看 Network中的 list请求 爆红, 仔细看 url 不对, ip好像在前段部分写死了, 端口 因为我docker里映射了一道所以也不一样, 之前偶尔能跑偶尔不能, 是请求的本地而不是服务器, 所以我调试的时候就能跑.
-
总结: 计算机网络 知识不熟练, 急待补充.
附: linux debug工具
yum install telnet
telnet localhost 8090 #可以测试端口通不通
pring localhost #ping可以测试ip
★★★ 常用 Docker 命令
命令 | 功能 |
---|---|
docker logs [container id] | 查看某个容器的日志 |
docker search mysql:5.7 | 搜索 mysql:5.7 可以 pull 的版本 |
docker pull mysql:5.7 | 下载 msyql:5.7 镜像 |
docker run mysql:5.7 -p 3306:3306 -d | 启动 msyql:5.7 镜像 , -p映射宿主机3306端口到 mysql容器3306端口, -d 后台执行 (另外还有很多 参数, 可自行查阅) 配置复杂最好写成 docker-compose.yml 例如 |
docker ps | 显示所有运行容器 |
docker ps -a | 显示所有容器 (包括已暂停的) |
docker stop <container name/id> | 停止容器 |
docker rm <container name/id> | 删除容器, 必须先 stop |
docker kill <container name/id> | 删除容器, 不必先 stop |
docker rm -f <container name/id> | 删除容器, 不必先 stop |
docker stop $( docker ps -aq) | 关闭对应 docker 容器 |
docker-compose up | 启动对应 docker 容器 条件:当前目录存在docker-compose.yml文件 |
docker-compose down | 关闭对应 docker 容器 并删除对应容器条件:当前目录存在docker-compose.yml文件 |
docker-compose start | start对应stop的 docker 容器 |
docker-compose stop | stop对应 docker 容器 |
docker exec -it <container name/id> /bin/bash | 进入容器-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。docker attach 命令 进入, 如果输入exit会导致容器停止 |
docker images | 显示所有镜像 |
docker commit ubuntu docker_ubuntu | 打包镜像 |
docker save -o target_tar_name.tar docker_images_name | 宿主机 sftp ftp 下载到本地时, 如果permission deny , chmod -R 777 $PWD/… 即可 |
docker import | target_tar_name.tar docker_images_name |
docker cp /home/ngp/mysql…tar.gz docker_container_name:/ | 复制宿主机文件到 docker |
docker rmi -f docker_images_name | 删除镜像 |
Docker 教程推荐
Docker 常见概念解读,可以看这篇 Github 上开源的这篇《Docker 基本概念解读》 ,从零到上手实战可以看《Docker 从入门到上手干事》这篇文章,内容非常详细!
另外,再给大家推荐一本质量非常高的开源书籍《Docker 从入门到实践》 ,这本书的内容非常新,毕竟书籍的内容是开源的,可以随时改进。
遇到的问题
1 oci runtime error: container_linux.go:235: starting container process caused “container init exited prematurely”
docker-compose.yml 的 volumes 中, 有 路径找不到