解决的问题:
统一标准
- 应用构建 docker build(镜像)
- 应用分享 docker hub
-
资源隔离
cpu、memory隔离
- 设备隔离与限制
-
架构
Docker_Host:
- 安装Docker的主机
- Docker Daemon:
- 运行在Docker主机上的Docker后台进程
- Client:
- 操作Docker主机的客户端(命令行、UI等)
- Registry:
- 镜像仓库
- Docker Hub
- Images:
- 镜像,带环境打包好的程序,可以直接启动运行
Containers:
移除以前的docker:
yum remove docker
- 配置yum源:
yum install -y yum-utils
- 安装docker:
yum install -y docker-ce docker-ce-cli containerd.io
启动docker:
systemctl enable docker --now
配置docker加速(阿里云获取自己的加速地址)
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://82m9ar63.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常用命令
镜像操作
查找镜像:
docker serch *
- 拉取镜像:
docker pull nginx
最新版本;docker pull nginx:1.20.1
指定版本。 - 查看下载的镜像:
docker images
- 移除镜像:
docker rmi nginx:1.20.1/id
- 容器启动:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name=mynginx -d --restart=always -p 88:80 nginx
-d是后台运行, —restart==always开机自启
- 查看运行的容器:
docker ps
- 查看所有容器:
docker ps -a
- 删除停止的容器:
docker rm 容器id/名字
docker rm -f 容器id/名字 #强制删除
- 停止容器:
docker stop 容器id/名字
- 再次启动:
docker start 容器id/名字
应用开机自启:
docker update 容器id/名字 --restart=always
容器操作
进入容器
进入容器内部的系统,修改容器内容
docker exec -it 容器id /bin/bash
#修改nginx欢迎页 docker exec -it mynginx /bin/bash cd usr/share/nginx/html ls echo "<h1> welcome to mynginx <h1>" > index.html cat index.html exit
提交改变
提交
docker commit -a "sengg" -m "index.html change" 14a74021b7eb senggnginx:v1.0
查看 docker image镜像传输
方法一本地传输:
docker save -o mynginx.tar senggnginx:v1.0
将镜像打tar包
将tar包传入其他机器之后加载 docker load -i mynginx.tar
远程仓库
- 注册dockerhub
- 把旧镜像名字改为仓库要求的新名字:
docker tag senggnginx:v1.0 sengg/mynginx:v1.0
- 创建仓库study_demo https://hub.docker.com/repositories
- docker 中登录
docker login
- 推送
docker push sengg/mynginx:v1.0
名字需要和仓库中的一致 - 登出
docker logout
- 拉取上传的镜像
docker pull sengg/mynginx:v1.0
数据挂载
即将docker容器里面的文件与服务器文件目录关联,只需改动服务器文件即可实现对docker容器内部文件的修改。docker run --name=mynginx \ -d --restart=always \ -p 88:80 -v /data/html:/usr/share/nginx/html:ro \ nginx
其他常用命令
docker 排错
docker logs 容器名/id
- 把容器指定位置的东西复制出来
docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf
- 把外面的内容复制到容器里面
docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf
Docker制作java镜像
Dockerfile文件
FROM openjdk:8-jdk-slim
LABEL maintainer=sengg
COPY target/*.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
build打包java文件
docker build -t java-demo:v1.0 -f Dockerfile .
docker build -t java-demo:v1.0 .
-t
指定打包的target文件。-f
Dockerfile 指定打包的dockerfile文件。.
表示在当前目录下工作,在dockerfile文件指定了target位置。启动容器
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0
分享镜像
```登录docker hub
docker login
给旧镜像起名
docker tag java-demo:v1.0 sengg/java-demo:v1.0
推送到docker hub
docker push sengg/java-demo:v1.0
别的机器
docker pull sengg/java-demo:v1.0
别的机器运行
docker run -d -p 8080:8080 —name myjava-app java-demo:v1.0 ```