Docker安装与部署
时间:2022-08-30 02:30:00
一、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是国外网站,下载慢,需要做镜像加速
为什么镜像比虚拟机小?
虚拟机会一起包装操作系统,但是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