文章目录
玛卡,巴卡,阿卡,哇卡,米卡,玛卡,呣!
玛卡,巴卡,阿巴,雅卡,伊卡,阿卡,噢!
哈姆,达姆,阿卡嗙,咿呀呦~ 玛卡,巴卡,阿卡,哇卡,米卡,玛卡,呣!
一、安装docker
阿里云镜像加速,这步可以不做
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pi9dpp60.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1、卸载旧版本
# 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装 Docker Engine-Community
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
\$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
使用官方源地址(比较慢) $ sudo yum-config-manager
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
可以选择国内的一些源地址:
阿里云
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
清华大学源
$ sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community 和 containerd
$ sudo yum install docker-ce docker-ce-cli containerd.io
Docker 安装完默认未启动。并且已经创建好 docker 用户组,但该用户组下没有用户。
或者安装特定版本:
要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:
1、列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
2、通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1。
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
启动 Docker。
$ sudo systemctl start docker
通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。
$ sudo docker run hello-world
二、建立网络
定义nginx网络
# 查看默认的网络bridge的详细信息
docker network inspect bridge
# 定义application网络
docker network create --driver bridge --subnet 192.168.2.0/16 --gateway 192.168.2.1 applicationNet
三、nginx部署
1、拉取Nginx进行
docker pull nginx
2、先在主机创建工作文件夹,为了挂载配置和静态文件的访问使用
mkdir -p /moko/docker/nginx/conf # 配置文件路径
mkdir -p /moko/docker/nginx/logs # 日志路径
mkdir -p /moko/docker/nginx/html # html 放静态文件
上面指令可自行合并为一个指令
3、启动容器查看配置文件路径,便复制配置文件到主机中
#启动一个容器,查看配置文件路径
[root@localhost nginx]# docker run -itd --name nginx nginx /bin/bash
root@e4ffa44bcc30:/# cd /etc/nginx/
root@e4ffa44bcc30:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
root@e4ffa44bcc30:/# cd /usr/share/nginx
root@e4ffa44bcc30:/usr/share/nginx# ls
html
root@e4ffa44bcc30:/usr/share/nginx#
#退出容器
root@e4ffa44bcc30:/usr/share/nginx# exit
exit
# 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录($PWD 当前全路径)
docker cp nginx:/etc/nginx/nginx.conf /moko/docker/nginx/conf
docker cp nginx:/etc/nginx/conf.d /moko/docker/nginx/conf
# 查看 容器 获取容器ID 或直接使用名字
docker container ls
# 停止容器
docker container stop nginx
# 删除容器
docker container rm nginx
# 在当前目录下创建目录:html 放静态文件
mkdir html
4、部署容器
docker run -d -p 80:80 \
-p 443:443 \
--name nginxweb \
-v /moko/docker/nginx/html:/usr/share/nginx/html \
-v /moko/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /moko/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /moko/docker/nginx/logs:/var/log/nginx \
nginx
-d # 表示在一直在后台运行容器 -p 80:80 # 对端口进行映射,将本地8081端口映射到容器内部的80端口 --name # 设置创建的容器名称 -v # 将本地目录(文件)挂载到容器指定目录; --link answer-server:answerserver 这计划是指需要转向本机docker容器的别名
这里最好写成一个启动脚本
vim nginxStartShell.sh
docker run -d -p 80:80 \
-p 443:443 \
--name nginxweb \
-v /moko/docker/nginx/html:/usr/share/nginx/html \
-v /moko/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /moko/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /moko/docker/nginx/logs:/var/log/nginx \
nginx
赋权 chmod 777 *.sh
四、mysql部署
1、docker仓库拉取mysql8.0
[root@localhost /]# docker pull mysql:8.0
[root@localhost /]# docker images mysql:8.0
2、先在主机创建工作文件夹,为了挂载配置和静态文件的访问使用
mkdir -p /moko/docker/mysql8/conf # 配置文件路径
mkdir -p /moko/docker/mysql8/logs # 日志路径
mkdir -p /moko/docker/mysql8/data # d数据路径
3、创建mysql8.0配置文件
vim /moko/docker/mysql8/conf/my.cnf
[mysqld]
#datadir=/usr/local/mysql/data
default_authentication_plugin=mysql_native_password #使用mysql8以前的密码插件,以便navicat等工具能够正常连接
default-storage-engine=INNODB
character_set_server = utf8
secure_file_priv=/var/lib/mysql
[mysqld_safe]
character_set_server = utf8mb4
[mysql]
default-character-set = utf8utf8mb4
[mysql.server]
default-character-set = utf8utf8mb4
[client]
default-character-set = utf8utf8mb4
4、部署容器
书写一个启动脚本
vim startMysql8Container.sh
docker run -d -p 3306:3306 --name mysql8 \
-v /moko/docker/mysql8/logs:/var/log/mysql \
-v /moko/docker/mysql8/data:/var/lib/mysql \
-v /moko/docker/mysql8/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
--net applicationNet \
--ip 192.168.2.215 \
mysql:8.0
导入: 先根据上面二中的命令将 sql 脚本复制到容器中,然后进入数据库,先创建数据库: 然后再导入:
# 1.获取容器长 ID
docker inspect -f '{{.ID}}' mysql8.0
# 2.将sql脚本复制到容器中
sudo docker cp host_path containerID:container_path
# 3.进入容器,进入mysql,创建数据库,并 use 选中,再导入
source /tmp/abc.sql
错误
root@17da121baa26:/# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决
在启动命令中把密码值为空,输入密码时直接回车
MYSQL_ROOT_PASSWORD=yes
两条命令来修改密码:
1. ALTER USER 'root'@'%' IDENTIFIED BY 'mysql1024.' PASSWORD EXPIRE NEVER;
2. ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql1024.';
退出重启一下
如果还是不行,在首次配置时,可以在配置文件my.cof中设置skip-grant-tables参数,该命令作用是跳过授权表,就是说谁都能进入MySQL看到所有数据表,输入任意字符账号密码都可以,当忘记账号密码时可以使用改命令修改密码,但是要随用随关,重启mysql,不然服务器上会有很大的风险。 输入登陆的指令,但是可任意输入密码,都可以登录,
skip-grant-tables
五、部署redis
docker pull redis
先在主机创建工作文件夹
mkdir -p /moko/docker/redis/conf # 配置文件路径
mkdir -p /moko/docker/redis/data # 数据路径
http://www.redis.cn/download.html 官网下载压缩包,获取到redis.conf文件,在/moko/docker/redis/conf中创建redis.conf文件
# redis 密码
requirepass Klkjyfb@123
# key 监听器配置
# notify-keyspace-events Ex
# 配置持久化文件存储路径
dir /redis/data
# 配置rdb
# 15分钟内有至少1个key被更改则进行快照
save 900 1
# 5分钟内有至少10个key被更改则进行快照
save 300 10
# 1分钟内有至少10000个key被更改则进行快照
save 60 10000
# 开启压缩
rdbcompression yes
# rdb文件名 用默认的即可
dbfilename dump.rdb
# 开启aof
appendonly yes
# 文件名
appendfilename "appendonly.aof"
# 持久化策略,no:不同步,everysec:每秒一次,always:总是同步,速度比较慢
# appendfsync always
appendfsync everysec
# appendfsync no
启动容器脚本
docker run -p 6379:6379 --name redis \
-v /moko/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /moko/docker/redis/data:/data \
-d redis redis-server /etc/redis/redis.conf
redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动
进入Redis容器测试
### 通过 Docker 命令进入 Redis 容器内部
docker exec -it redis /bin/bash
### 进入 Redis 控制台
redis-cli
### 添加一个变量为 key 为 name , value 为 moko 的内容
> set name moko
### 查看 key 为 name 的 value 值
> get name
六、Idea docker打包
一、配置Linux系统上的docker
1.1 修改文件
修改文件:vi /lib/systemd/system/docker.service,将第五行改为:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
注意这里的端口是2375
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service time-set.target
Wants=network-online.target containerd.service
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always
# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3
# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
1.2 重新加载配置文件 重启docker服务
//重新加载服务的配置文件
systemctl daemon-reload
//重启docker服务以下两个命令任意选一个
//命令1
service docker restart
//命令2
systemctl restart docker
二、配置IDEA Docker integration插件
在Setting设置中搜索 “ docker” 在箭头4框内输入自己服务器的ip加给docker配置的端口,并且箭头5位置出现该提示则代表成功!
成功后直接apply
直接点击这里连接到远程服务器上的docker
三、配置项目
3.1置需要打包成docker镜像的Maven项目的POM.XML文件
<properties>
<java.version>1.8</java.version>
<!--打包后镜像的前缀-->
<docker.image.prefix>moko</docker.image.prefix>
</properties>
<build>
<plugins>
<!--镜像启动插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--配置部署到远程docker中-->
<!--一键部署-->
<plugin>
<!--启动插件-->
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--指定生成的镜像名-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!--基础镜像-->
<baseImage>java:8</baseImage>
<!--作者信息-->
<maintainer>lilinjiang</maintainer>
<!--切换到/ROOT目录-->
<workdir>/ROOT</workdir>
<cmd>["java","-version"]</cmd>
<entryPoint>["java","-jar","-Duser.timezone=GMT+08","${project.build.finalName}.jar"]</entryPoint>
<!--指定远程 docker api地址-->
<dockerHost>http://xxx.xxx.xxx:2375</dockerHost>
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<!--用于指定需要复制的跟目录 此处配置的${project.build.directory}是 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
3.2 通过Maven 清理 并 打包
pom设置docker打包时区问题解决
<entryPoint>["java","-jar","-Duser.timezone=GMT+08","${project.build.finalName}.jar"]</entryPoint>
四、构建docker镜像
4.1 准备工作
-
需要配置 maven 环境变量 否则将无法使用maven命令
-
给maven中添加docker-maven-plugin的白名单,在pluginGroups节点中添加如下代码。(直接搜索关键字找到!!!!)
<pluginGroup>com.spotify</pluginGroup>
-
可能会用到的baseImg镜像依赖(打包时会自动下载jdk依赖,若未自动下载请手动拉取下列镜像任意一个即可)
docker pull openjdk:8u191-jdk-alpine3.9
docker pull openjdk:8-jdk-alpine
4.2 构建
- 在你要构建的项目上右键开启命令行
- 在打开的命令行中输入一下命令
mvn docker:build
然后我们就能在docker中看到生成的镜像了
4.3 配置运行容器
右键镜像选择 create container 填写上面信息 做好端口映射run 运行即可
一些问题参考:
IDEA-Docker插件控制台中文乱码