✅作者简介:我是18shou,一名即将秋招的java实习生
🔥系列专栏:牛客刷题专栏
📃推荐一款模拟面试、刷题神器👉 在线刷题面经模拟面试
安装Docker
**uname -r**
查看系统内核
4.18.0-193.14.2.el8_2.x86_64
[root@iZuf61ahstfl2fj58302fsZ /]# cat /etc/os-release
查看系统版本
卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Docker初装命令
1、yum 包更新到最新
yum update
2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、 安装docker,出现输入的界面都按 y
yum install -y docker-ce
5、 查看docker版本,验证是否验证成功
docker -v
Docker架构
配置阿里云镜像
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://9qztm9ao.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
每个人的地址都不同(从服务器上获取)
cat /etc/docker/daemon.json
#查看文件
Docker开启相关命令
启动Docker
systemctl start docker
查看Docker状态
systemctl status docker
停止Docker
systemctl stop docker
开机自启动Docker
systemctl enable docker
重启Docker
systemctl restart docker
Docker镜像相关命令
镜像就是打包了某一个软件和它需要的运行环境
可以去dockerhub查看镜像版本
#查看docker镜像
docker images
#docker搜寻镜像 比如 redis
docker search xxx
#docker拉取镜像
docker pull xxx
默认拉取最新版,假如指定redis版本:
docker pull redis:5.0
#docker删除镜像
[root@iZuf61ahstfl2fj58302fsZ /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 5.0 c5da061a611a 3 months ago 110MB
redis latest 7614ae9453d1 3 months ago 113MB
[root@iZuf61ahstfl2fj58302fsZ /]#
docker rmi 7614ae9453d1
或者docker rmi redis:5.0
先通过images搜寻到对应镜像ID然后输入命令
docker rmi 7614ae9453d1
第二种方式:通过名字和版本删除
docker rmi xxx:xxx
查看所有镜像id
docker images -q
#删除所有镜像
docker rmi `docker images -q`
Docker容器相关命令
容器是镜像运行出来的实例
#运行 xx:起名 xxx:镜像 xxxx:版本 -i:表示容器保持一直运行 -t:分配终端输入命令
docker run -i -t --name=xx xxx:xxxx /bin/bash
#运行已有的容器 id通过docker ps -a 查询
docker start id
#查看运行容器
docker ps
#查看所有容器
docker ps -a
#后台运行容器 xx:起名 xxx:镜像 xxxx:版本 -i:表示容器保持一直运行 -t:分配终端输入命令
docker run -i -d --name=xx xxx:xxxx /bin/bash
#进入容器终端 name是之前起的名字
docker exec -i -t name /bin/bash
#停止某个容器 :name是给容器起的名字
docker stop name
#删除某个容器 :name是给容器起的名字
docker rm name
#删除所有容器:不能删除正在运行的容器
docker rm `docker ps -aq`
#查看容器的详细信息:name是给容器起的名字
docker inspect name
Docker容器、数据卷
问题1:Docker容器删除后,容器中产生的数据随之销毁
答案:持久化到数据卷
问题2:Docker容器和外部机器可以直接交换文件吗?
答案:不可以,但是可以通过数据卷间接交换,改变数据卷间接改变容器数据
问题3:容器之间想要进行数据交互?
答案:一个数据卷挂载多个容器,这些容器就可以进行数据交互了
Docker容器、数据卷命令
目录必须是绝对路径、如果目录不存在会自动创建、可挂载多个
#挂载数据卷 目录会自动创建 -v (数据卷目录) :(容器目录) (容器名称: 版本号)终端
docker run -it --name=c2 -v /root/data:/root/data_container centos:7 /bin/bash
#多容器进行数据交换的方式
#1.多个容器挂载同一个数据卷
docker run -it --name=c4 -v ~/data:/root/data redis:5.0
docker run -it --name=c3 -v ~/data:/root/data redis:5.0
#2:数据卷容器:即上图:c3挂载数据卷,c1、c2挂载c3,c1、c2、c3就可以互相传输和通信
c3称为数据卷容器
#创建启动c3数据卷容器,使用-v参数设置数据卷 volume是数据卷目录
docker run -it --name=c3 -v /volume redis:5.0 /bin/bash
#创建启动c1、c2容器,使用--volumes-from参数设置数据卷
docker run -it --name=c1 --volumes-from c3 redis:5.0 /bin/bash
docker run -it --name=c2 --volumes-from c3 redis:5.0 /bin/bash
这样c1 c2 c3就可以互相传输和通信了
Docker之部署
一、部署MySQL
记得开启所有防火墙端口包括外部连接的端口
- 搜索mysql镜像
docker search mysql
- 拉取mysql镜像
docker pull mysql:5.6
- 创建容器,设置端口映射、目录映射
在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
*docker run -id *
**-p 3307:3306 **
**--name=c_mysql **
**-v $PWD/conf:/etc/mysql/conf.d **
**-v $PWD/logs:/logs **
**-v $PWD/data:/var/lib/mysql **
**-e MYSQL_ROOT_PASSWORD=123456 **
mysql:5.6
参数说明:
- -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
- 进入容器,操作mysql
docker exec -it c_mysql /bin/bash
- 使用外部机器连接容器中的mysql
二、部署Tomcat
#搜索tomcat镜像
docker search tomcat
#拉取tomcat镜像
docker pull tomcat
- 创建容器,设置端口映射、目录映射
在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
*docker run -id --name=c_tomcat *
**-p 8080:8080 **
**-v $PWD:/usr/local/tomcat/webapps **
tomcat
参数说明:
- -p 8080:8080:将容器的8080端口映射到主机的8080端口**-v $PWD:/usr/local/tomcat/webapps:**将主机中当前目录挂载到容器的webapps
- 使用外部机器访问tomcat
- 在tomcat文件夹下创建test/index.html 并在index.html中写入xxx
- 访问106.15.89.94:8080/test/index.html
三、部署Nginx
- 搜索nginx镜像
docker search nginx
- 拉取nginx镜像
docker pull nginx
- 安装完成后,我们可以使用以下命令来运行 nginx 容器:
docker run --name nginx-test -p 80:80 -d nginx
- --name nginx-test:容器名称。
- -p 80:80: 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。
- -d nginx: 设置容器在在后台一直运行。
- 使用外部机器访问nginx
在html文件里面新建index.html然后访问106.15.89.94:80
四、部署Redis
- 搜索redis镜像
docker search redis
- 拉取redis镜像
docker pull redis:5.0
- 创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0
- 使用外部机器连接redis ./可能有问题
./redis-cli.exe -h 192.168.149.135 -p 6379
Docker镜像原理
Docker容器转化为镜像
DockerFile
hub.docker.com 当中搜索镜像的dockerfile
关键字
作用
备注
FROM
指定父镜像
指定dockerfile基于那个image构建
MAINTAINER
作者信息
用来标明这个dockerfile谁写的
LABEL
标签
用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN
执行命令
执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD
容器启动命令
提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT
入口
一般在制作一些执行就关闭的容器中会使用
COPY
复制文件
build的时候复制文件到image中
ADD
添加文件
build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV
环境变量
指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG
构建参数
构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME
定义外部可以挂载的数据卷
指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]
EXPOSE
暴露端口
定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR
工作目录
指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER
指定执行用户
指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK
健康检查
指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD
触发器
当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL
发送信号量到宿主机
该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL
指定执行脚本的shell
指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
DockerFile自定义centos
自定义一个可以使用vim命令的centos
#首先创建一个文件docker-file(随意起名),然后在文件中vim一个文件centos_dockerfile 输入以下指令
FROM centos:7
MAINTAINER itheima 2734@qq.com
RUN yum install -y vim
WORKDIR /usr
cmd /bin/bash
#然后docker build 对应上方vim的文件
docker build -f ./centos_dockerfile -t itheima_centos:1 .
#这样镜像就构建出来了用docker images可以查看已有镜像,发现有theima_centos,运行容器
docker run -it --name=dockerfile_centos itheima_centos:1
这时候centos就可以使用vim命令了
DockerFile部署springboot
首先将一个springboot项目打成jar包确保能运行
然后使用xftp将jar包复制到linux系统某个文件夹下(docker-files)下
然后配置文件
vim springboot_dockerfile
FROM java:8
MAINTAINER itheima <[email protected]>
ADD springbootjlvpC-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar
#docker build 对应上方vim的文件springboot_dockerfile ,这个app是镜像名
docker build -f ./springboot_dockerfile -t app .
#这样镜像就构建出来了用docker images可以查看已有镜像,发现有app,运行容器
如果有mysql的配置这里会报错,因为连不上本机的mysql了。。9000s是映射端口
docker run -id -p 9000:8080 --name=dockerfile_springboot app
Docker Compose
一、安装Docker Compose
Compose目前已经完全支持Linux、Mac OS和Windows,在我们安装Compose之前,需要先安装Docker。下面我 们以编译好的二进制包方式安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s-
uname -m` -o /usr/local/bin/docker-compose
设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
查看版本信息需要先设置权限
docker-compose -version
二、卸载Docker Compose
二进制包方式安装的,删除二进制文件即可 rm /usr/local/bin/docker-compose
三、 使用docker compose编排nginx+springboot项目
- 创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker-compose
- 编写 docker-compose.yml 文件
version: '3'
services:
nginx:
image: nginx
ports:
- 80:80
links:
- app
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
app:
image: app
expose:
"8080"
创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d
- 在./nginx/conf.d目录下 编写itheima.conf文件
server {
listen 80;
access_log off;
location / {
proxy_pass http://app:8080;
}
}
- 在~/docker-compose 目录下 使用docker-compose 启动容器
docker-compose up
- 测试访问
Docker私有仓库
一、私有仓库搭建
#1、拉取私有仓库镜像
docker pull registry
#2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
#3、打开浏览器 输入地址
http://私有仓库服务器ip:5000/v2/_catalog
,看到{"repositories":[]} 表示私有仓库 搭建成功
#4、修改daemon.json
vim /etc/docker/daemon.json
在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
#5、重启docker 服务
systemctl restart docker
docker start registryy
二、将镜像上传至私有仓库
1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
三、 从私有仓库拉取镜像
#拉取镜像 之前是公网拉 现在是内网拉
docker pull 私有仓库服务器ip:5000/centos:7
版权归原作者 _18shou 所有, 如有侵权,请联系我们删除。