云原生(docker jenkins k8s)docker篇
docker
(1)架构
● Docker_Host:
○ 安装Docker的主机
● Docker Daemon:
○ 运行在Docker主机上的Docker后台进程
● Client:
○ 操作Docker主机的客户端(命令行、UI等)
● Registry:
○ 镜像仓库
○ Docker Hub
● Images:
○ 镜像,带环境打包好的程序,可以直接启动运行
● Containers:
○ 容器,由镜像启动起来正在运行中的程序
(2)安装
- 移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 配置yml源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装docker
#安装最新版本的
sudo yum install -y docker-ce docker-ce-cli containerd.io
#安装指定版本的
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
- 启动
systemctl enable docker --now
- 配置加速
在阿里云服务找到-容器镜像服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nnyse9wk.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.常用命令和说明
(1)下载、删除镜像
#下载最新版本
docker pull nginx
#下载指定版本
docker pull nginx:1.20.1
#查看下载的所有镜像
docker images
#删除镜像
docker rmi 镜像名:版本号/镜像id
docker rmi nginx:1.20.1
#或者
docker rmi c8d03f6b8b91
(2)启动容器、删除容器
#简单运行
docker run nginx:1.20.1
#参数化运行
# --name 设置容器的别名
# -d后台启动
# --restart=always 开机自启
#-p 映射端口,将主机的9010和容器的80端口对应
docker run --name=mynginx -d --restart=always -p 9010:80 nginx:1.20.1
#查看正在运行中的容器
docker ps
# 查看所有
docker ps -a
# 删除停止的容器
docker rm 容器id/名字
docker rm -f mynginx #强制删除正在运行中的
#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字
4、进入容器
(1)进入容器,修改容器内容
# 进入容器内部的系统,修改容器内容
docker exec -it 容器id /bin/bash
#修改nginx页面
cd /usr/share/nginx/html
echo "this is nginx index" > index.html
#退出nginx
exit
(2)挂载数据到外部修改
#-v表示挂载 将/usr/share/nginx/html挂载到根目录的/dta/html并赋予读写权限,ro是只读权限
docker run --name=mynginx -d --restart=always -p 88:80 -v :/usr/share/nginx/html:rw nginx:1.20.1
此时修改data/html会映射到容器内
例子:将nginx的配置文件挂载到/data/conf下
首先在在/data/conf下将nginx.conf文件复制过来。因为使用-v只能建立文件夹
然后执行
docker run -d -p 80:80 -v /data/conf/nginx.conf:/etc/nginx/nginx.conf --name mynginx-02 nginx
5、修改提交,供远程使用
(1)将自己修改好的容器,使用commit保存在本地仓库,供以后回滚
docker commit -a "cgy" -m "首页变化" 8d44b98ca259 testnginx:v1.0
(2)将容器保存成tar包,提供下载,供其他机器使用
#将镜像文件打包成tar,然后下载通过u盘传输,或使用传输命令
docker save -o abc.tar testnginx:v1.0
#使用命令将tar包传输到114.115.128.34服务器,前面是用户名,后面是传到的地址,然后输入密码
scp abc.tar root@114.115.128.34:/root/
#在34服务器上加载镜像
docker load -i abc.tar
(3)将镜像推送到远程仓库,其他机器,通过pull拉取
#先打新tag 后面的以华为云为例,要推入仓库的仓库/组织/镜像名:新定义的tag
docker tag testnginx:v1.0 swr.cn-north-4.myhuaweicloud.com/cloud-cgy/mynginx:t1.0
#推送先登录 用户名 密码 推送地址
docker login -u cn-north-4@xxxxx -p 03c4d9434d665de21b6f2c9ec593 swr.cn-north-4.myhuaweicloud.com
#推送
sudo docker push swr.cn-north-4.myhuaweicloud.com/cloud-cgy/mynginx:t1.0
#如果其他的机器想使用先登录,然后pull
docker pull swr.cn-north-4.myhuaweicloud.com/cloud-cgy/mynginx:t1.0
6、查看docker日志
#进行排错时
docker logs 容器名/id
#进入容器
docker exec -it 容器id /bin/bash
7、copy镜像里面的文件
#把容器指定位置的东西复制出来
docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf
#把外面的内容复制到容器里面
docker cp /data/conf/nginx.conf 5eff66eec7e1:/etc/nginx/nginx.conf
docker 构建springboot项目
(1)安装redis
新建/data/redis/redis.conf文件,可以把redis的配置文件copy到改目录
docker run -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d --name myredis -p 9002:6379 redis:latest redis-server /etc/redis/redis.conf
说明:
-p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
--name redis 指定该容器名称,查看和进行操作都比较方便。
-v 挂载目录,规则与端口映射相同。
为什么需要挂载目录:个人认为docker是个沙箱隔离级别的容器,这个是它的特点及安全机制,不能随便访问外部(主机)资源目录,所以需要这个挂载目录机制。
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/data/redis/redis.conf
(2)redis设置密码
重启redis
docker restart 容器id
(3)dockerfile构建应用镜像
1.构建镜像
在项目下创建Dockerfile文件
FROM openjdk:8-jdk-slim
LABEL maintainer=leifengyang
COPY target/*.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
上传target目录和jar包以及 Dockerfile。在Dockerfile所在目录下执行
#-t表示给运行容器赋值名字和版本 -f表示使用那个dockerfile文件 .表示在当前目录下工作
docker build -t java-demo:v1.0 -f Dockerfile .
2.启动镜像
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0
k8s篇参考语雀笔记