# Docker安装开发环境
### JDK
1、下载JDK1.8
```bash
docker pull java:8
```
![image-20220514142936470](https://s2.loli.net/2022/05/14/dmP2LHftTG5bUrR.png)
2、运行Java JDK镜像到容器
```bash
docker run -d -it --name java java:8
```
```bash
/** 参数说明
** run 启动一个镜像容器
** -d 后台运行该容器
** -I 以交互模式运行容器,通常与 -t 同时使用
** -t 为容器重新分配一个伪输入终端
*/
```
![image-20220514143216207](https://s2.loli.net/2022/05/14/SWVPJz2y1Git8DZ.png)
3、查看镜像情况
```bash
docker ps
```
![image-20220514143406864](https://s2.loli.net/2022/05/14/Us3oZdkvWiufLrp.png)
4、进入到容器查看JDK
```bash
docker exec -it java /bin/bash
```
![image-20220514143604895](https://s2.loli.net/2022/05/14/uGxicyOsjnzNLk5.png)
### MySQL
1、在docker仓库搜索mysql
```bash
docker search mysql
```
![image-20220514152033449](https://s2.loli.net/2022/05/14/XgdeVpt7jioFY2Q.png)
2、在docker仓库拉取mysql8.0
```bash
docker pull mysql:8.0
```
> ps:如果不指定版本,会默认下载最新版本
>
> ```awk
> docker pull mysql //默认拉取最新版本
> ```
![image-20220514152057907](https://s2.loli.net/2022/05/14/uZ2cpsUy3L9aGDx.png)
3、查看本地仓库镜像是否下载成功
```
docker images mysql:8.0
```
![image-20220514152126649](https://s2.loli.net/2022/05/14/wbACVPUcjsGuLxq.png)
4、安装运行mysql8.0容器
```
docker run -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0
```
> 备注:
>
> ```diff
> -p 将本地主机的端口映射到docker容器端口
> --name 容器名称命名
> -e 配置信息,配置root密码为root
> -d 镜像名称
> ```
![image-20220514152640172](https://s2.loli.net/2022/05/14/BxRhAmt6M385LS7.png)
5、查看容器运行情况
```bash
docker ps
```
![image-20220514152723086](https://s2.loli.net/2022/05/14/pCfksZMLF3eE4lG.png)
6、在docker容器中登录到mysql
```bash
docker exec -it mysql8.0 bash
mysql -uroot -p
```
![image-20220514152818503](https://s2.loli.net/2022/05/14/wGzchoQpeE2RjgX.png)
7、使用Navicat连接到mysql
因为我的docker安装在远程服务器,要在本机访问使用Navicat访问到MySQL,需要开放3306端口,不限制IP来源。
输入远程服务器IP地址和3306端口,输入root/root即可。
### Redis
1、在docker仓库中搜索redis
```bash
docker search redis
```
![image-20220514182052778](https://s2.loli.net/2022/05/14/vmyBcf9ZrMtseWJ.png)
2、获取Redis镜像(最新版本或者3.0.5)
```
docker pull redis:latest
docker pull redis:3.0.5
```
![image-20220514182006425](https://s2.loli.net/2022/05/14/WqexSRF7HKvZgw3.png)
3、创建文件目录存在redis.conf,文件从官网下载包,并解压获取其中redis.conf。并以此为基础修改相应配置,实现外部挂载文件形式运行。(为什么要这么做呢?)
```
sudo mkdir /usr/local/redis/conf #存放配置文件
sudo mkdir /usr/local/redis/data #存放数据
```
将刚在获取到redis.conf配置文件,使用记事本打开。进行如下修改:
```
#bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
appendonly yes #redis持久化(可选)
```
将修改后的文件保存,并上传到服务器中`/usr/local/redis/conf`
![image-20220514181455142](https://s2.loli.net/2022/05/14/4Byfquh5DxHdbRe.png)
4、使用配置文件启动Redis容器
```
docker run -p 6379:6379 --name myredis -v /usr/local/redis/con
f/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data -d redis redis-server
/etc/redis/redis.conf --appendonly yes
```
> 参数解释说明:
>
> - -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
> - --name myredis 指定该容器名称,查看和进行操作都比较方便。
> - -v 挂载目录,规则与端口映射相同。
> 为什么需要挂载目录:个人认为docker是个沙箱隔离级别的容器,这个是它的特点及安全机制,不能随便访问外部(主机)资源目录,所以需要这个挂载目录机制。
> 例: -v /usr/local/redis/redis.conf:/etc/redis/redis.conf 容器 /etc/redis/redis.conf 配置文件 映射宿主机 /usr/local/redis/redis.conf。 会将宿主机的配置文件复制到docker中
> **重要: 配置文件映射,docker镜像redis 默认无配置文件。**
> - -d redis 表示后台启动redis
> - redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/redis/redis.conf
> **重要: docker 镜像reids 默认 无配置文件启动**
> - --appendonly yes 开启redis 持久化
![image-20220514181920407](https://s2.loli.net/2022/05/14/TsfFg1nkYD2JxWZ.png)
6、查看myredis容器运行情况。
```
docker ps
```
![image-20220514181851203](https://s2.loli.net/2022/05/14/LXUvcTEoJlV6ag8.png)
7、使用RESP登录到Redis(同理,需要在服务器上开放6379端口)
![image-20220514182210920](https://s2.loli.net/2022/05/14/SLvw6V4eYhGsZgD.png)
### MongoDB
1、在docker仓库搜索mongo镜像
```
docker search mongo
```
2、拉取5.0.6版本的镜像
```
docker pull mongo:5.0.6
```
![image-20220514185242807](https://s2.loli.net/2022/05/14/9MBoHRg3qm1cadV.png)
3、创建映射文件的目录,并且赋予权限
```
sudo mkdir -p /usr/local/mongodb/datadb
#mongodb下面所有子目录给予777权限
sudo chmod 777 -R /usr/local/mongodb/
```
4、运行mongodb容器
```
docker run -d --name mongodb -p 27017:27017 -v /usr/local/mongodb/datadb:/data/db -d mongo:5.0.6
```
> 参数说明
>
> -d 后台运行容器
> –name mongodb 运行容器名
> -p 27018:27017 将容器的27017端口映射到主机的27018端口
> -v /usr/local/mongodb/datadb:/data/db 文件挂载: 本机:容器
> mongo 运行的镜像名字
![image-20220514185322528](https://s2.loli.net/2022/05/14/nWqKFsm1ihkTwfl.png)
5、查看容器运行情况
```
docker ps | grep mongodb
```
![image-20220514185408790](https://s2.loli.net/2022/05/14/QE36mfXZ5tbW28e.png)
6、使用Navicat连接登录到mongoDB。(同理在服务器开放27017端口)
### Nodejs
1、在docker仓库搜索node镜像
```
docker search node
```
2、拉取14.10.0版本的nodejs
```
docker pull node:14.10.0
```
3、运行nodejs容器(给容器起名为nodejs)
```
docker run -itd --name nodejs node:14.10.0
```
4、进入容器,查看node版本
```
docker exec -it nodejs /bin/bash
```
![image-20220514192315034](https://s2.loli.net/2022/05/14/1Y7hRso23M6VPr8.png)
### Nginx
1、在docker仓库搜索nginx镜像
```
docker search nginx
```
2、拉取1.12版本的镜像
```
docker pull nginx:1.12
```
3、运行mynginx容器(给容器起名为mynginx)
```
docker run -d --name mynginx -p 80:80 nginx:1.12
```
4、查看容器运行情况
```
docker ps | grep nginx
```
![image-20220514193634889](https://s2.loli.net/2022/05/14/GOVyY9whF4JlZWD.png)
5、访问IP+80
![image-20220514193738118](https://s2.loli.net/2022/05/14/d3RFvzqMCkTSA8E.png)
### Nacos
这次安装docker安装nacos,一次命令就搞定。(安装找不到最新版本,会默认安装最新版本)
```
docker run -d -p 8848:8848 --env MODE=standalone --name nacos nacos/nacos-server
```
![image-20220514202316085](https://s2.loli.net/2022/05/14/CcEhp2jeROYuX8k.png)
查看容器运行状态
```
docker ps
```
![image-20220514202453207](https://s2.loli.net/2022/05/14/Xyv5H7aFbJPVj39.png)
最后一步:输入IP+8848/nacos,在浏览器打开。
![image-20220514202730271](https://s2.loli.net/2022/05/14/ji7erQHEx8D9sSp.png)
# 附录1
进入docker容器有几种方式,我们分别来看一下:
- docker attach [容器ID(缩写/全称)容器名称]:
docker自带方式,但是当多个窗口同时attach到同一个容器时,所有的窗口都会同步的显示,假如其中的一个窗口发生阻塞时,其它的窗口也会阻塞,并且在使用exit退出容器时会导致正在运行的容器停止。因此,一般不建议使用此方式进入容器。如果使用该方式,退出容器时不能使用exit和Ctrl+D,应该使用Ctrl+P+Q来退出,这样不会导致容器停止。
- docker exec -it [容器ID(缩写/全称)容器名称] /bin/bash :
这种方式是经常使用的操作。-I -t操作与前面说的docker run命令的-it操作一致
# 附录2
#### 一、查找JDK
```
docker search jdk
复制代码
```
#### 二、拉取JDK1.8镜像
```
docker pull codenvy/jdk8_maven3_tomcat8
复制代码
```
#### 三、查看下载的镜像
```
docker images
复制代码
```
#### 四、启动JDK镜像
```
docker run -di --name=jdk8 codenvy/jdk8_maven3_tomcat8
复制代码
```
#### 五、查看镜像运行情况
```
docker ps
复制代码
```
#### 六、进入镜像
\# 方法1 退出后docker ps 进程还在
```
docker exec -it jdk8 /bin/bash
复制代码
```
\# 方法2 退出后 进程也会自动退出
```
docker attach 镜像id
复制代码
```
进入之后
```
Java -version
复制代码
```
#### 七、退出镜像
```
exit
复制代码
```
#### 八、停止镜像
```
docker ps docker stop 镜像id
复制代码
```
#### 九、再次启动镜像
```
docker run -di --name=jdk8 codenvy/jdk8_maven3_tomcat8
复制代码
```
重新启动
```
docker start 镜像id
复制代码
```
直接启动镜像并进入
```
docker run -it codenvy/jdk8_maven3_tomcat8 /bin/bash
复制代码
```
更换容器名称
```
docker run -di --name=jdk1.8 codenvy/jdk8_maven3_tomcat8
复制代码
```
删除容器
```
docker rm 容器id
```
# 附录3
### 常用的docker命令
```awk
docker search 镜像名称 //搜索镜像
docker pull 镜像名称:版本号 //拉取对应版本的镜像
docker pull 镜像名称 //默认拉取最新的镜像
docker images //查看本地已下载的镜像
docker ps //查看正在运行的容器
docker ps -a //查看所有的容器(包括run、stop、exited状态的)
docker container ls //查看正在运行的容器
docker rm 容器ID //只能删除没有在运行的容器
docker rm -f 容器ID //可以删除正在运行的容器
docker run -p 本地主机端口号:容器服务端口号 --name 容器名字 [-e 配置信息修改] -d 镜像名字
docker start 容器ID //启动容器
docker stop 容器ID //终止容器
docker rmi 镜像名称orID //删除镜像
```
Docker安装开发环境