一、Docker安装
centos下安装docker
其他系统参照如下文档
https://docs.docker.com/engine/install/centos/
1、移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# docker-ce是安装最新版本的Docker,如果要指定版本,就docker-ce-20.10.7
# docker-ce docker社区版
# docker-ce-cli docker命令行
# containerd.io docker环境
4、启动
systemctl enable docker --now
# 启动docker 并设置为开机启动
5、配置加速
这里额外添加了docker的生产环境核心配置cgroup
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qbbzjf4y.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:阿里云的这个镜像加速服务只针对于Docker客户端版本大于 1.10.0 的用户。
上面这个地址也可以使用你们自己的,阿里云产品与服务中搜索容器镜像服务
这个就是你自己的加速地址
二、几个名词,概念
1、镜像:
镜像就像是一个应用软件,类似于.exe文件,将docker中的所有内容打包成固定格式,就叫镜像。
docker hub就相当于应用商店,需要什么镜像可以去直接搜
https://registry.hub.docker.com/,但是这个docker hub是国外网站,下载很慢,所以需要做镜像加速
2、镜像相对于虚拟机为什么小?
虚拟机会将操作系统一起打包,但是docker不会,docker只会打包差异化的东西,比如说不同的运行环境
三、Docker命令
1、获取镜像
docker pull mysql #默认下载最新版
镜像名:版本名(也叫标签 tag)
指定版本下载:
docker pull mysql:5.7.35
## 下载来的镜像都在本地
docker images #查看所有镜像
# 删除镜像
docker rmi 镜像名:版本号/镜像id
docker rmi mysql #如果没有指定版本,默认卸载最新
2、启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run 设置项 镜像名 镜像启动运行的命令(镜像里面默认有的,一般不会写)
docker run --name=mynginx -d --restart=always -p 88:80 nginx
# 设置项:
# --name string Assign a name to the container:给即将启动的容器起一个名字
# -d:后台运行,控制台不会阻塞,保持长久运行
# --restart=always: 开机自启
# -p 端口映射 主机端口:Docker端口
# 查看正在运行的容器
docker ps
# 查看所有
docker ps -a
# 删除停止的容器
docker rm 容器id/名字
docker rm -f mynginx #强制删除正在运行中的
#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字
#应用开机自启
#--restart string Restart policy to apply when a container exits (default "no")
docker update 容器id/名字 --restart=always
docker run --name=mynginx -d --restart=always nginx
# 启动容器并设置为开机自启
3、外网如何访问Docker的端口(端口映射)
3.1、什么叫端口映射:
#比如nginx的默认端口是80,我们将80端口绑定到主机的88端口,
#也就是说,如果我们访问主机ip:88端口,则会跳转的Docker的80端口
#这个过程就是端口映射
3.2、端口映射的实现
#update不能修改端口,所以对于已经启动Docker只能先删除再重新启动
docker rm -f mynginx
docker run --name=mynginx -d --restart=always -p 88:80 nginx:latest
# 把主机的88端口映射给容器的80端口
然后使用docker ps即可看到端口映射,0.0.0.0代表任何主机访问88端口都会映射到80
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUy1R68M-1633922164713)(/upload/2021/10/image-a240b190fca544babd111e74ae90b03c.png)]
注意!!!:如果自定义了端口,那么一定要在安全组中放行该端口
4、进入容器
docker exec -it container_id /bin/bash
5、修改内容
5.1、进入容器内部修改
#进容器里面修改nginx主页显示的内容
/usr/share/nginx/index.html
5.2、挂载数据到外部修改
docker run --name=mynginx \
-d --restart=always \
-p 88:80 \
-v /data/html:/usr/share/nginx/html:ro \
nginx
# 修改页面只需要去 主机的 /data/html
-v 主机的目录:容器的目录 相当于端口映射一样的存在 ,但是并不会把容器的东西复制到主机对应目录下
:ro 只读,容器里面不能修改,但是主机可以修改
:rw 读写,容器内外都可以读写
#挂载了数据之后,所有的页面必须在主机对应的路径有页面才能访问,否则访问失败403
echo 1111>""
6、提交改变
将自己修改好的镜像提交成一个新的镜像。如果当前容器丢失,可以从已提交的镜像创建容器
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "lcq" -m "nginx" 341d81f7504f mynginx:v1.0
6.1、将镜像落盘
docker save -o xxx images
docker save -o /homt/lcq/mynginx.tar mynginx:v1.0
6.2、镜像传输
scp /home/lcq/mynginx.tar root@47.113.225.7:/root/
6.3、加载镜像tar包
docker load -i /root/mynginx.tar
#运行测试
docker run -d --name=mynginx -p 88:80 mynginx:v1.0
6.4、推送到docker hub
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
# 把旧镜像的名字,改成仓库要求的新版名字:new-repo:tagname
docker tag mynginx:v1.0 10535738/mynginx:v1.0
# 登录到docker hub
docker login
# 登录后可以一直保持登陆状态
docker logout(推送完成镜像后退出)
# 推送
docker push 10535738/mynginx:v1.0
# 别的机器下载
docker pull 10535738/mynginx:v1.0
7、命令补充
#查看容器运行日志:
docker logs 容器名/id
docker exec -it container_id /bin/bash
# docker挂在配置文件到外面 nginx
docker run -d -p 88:80 \
-v /data/html:/usr/share/nginx/html:ro \
-v /data/conf/nginx.conf:/etc/nginx/nginx.conf \
--name mynginx-02 \
nginx
# -v /data/conf/nginx.conf 这个如果没有创建,会默认从创建一个目录,所以需要我们先把nginx.conf文件准备好
docker cp container_id:/etc/nginx/nginx.conf /data/conf/nginx.conf
docker cp 要复制的内容 目的地
四、使用Dockerfile打包应用
Dockerfile
# 基础环境 从dockerhub上找 注意看linux版本的
FROM openjdk:8-jdk-slim
# 作者
LABEL maintainer=lcq
# 一旦文件打包好,就是一个单独的Linux系统,要把需要的文件先复制进来
COPY target/*.jar /app.jar
#应用程序入口 有ENTRYPOINT 和 CMD两种,区别是:
ENTRYPOINT["java","-jar","app.jar"]
# CMD
打包
docker build -t java-demo:v1.0 .
# -t 给镜像起一个名字
# . 表示当前目录下工作,因为文件都复制在这个目录下
启动
docker run -d -p 8080:8080 --name=java_demo java-demo:v1.0