Docker 的快速使用

ubuntu安装
centos安装

安装完毕之后执行一下这条命令,可以避免每次使用docker命令都需要sudo权限

shell 复制代码
sudo usermod -aG docker $USER

阿里云docker镜像加速
DockerHub

遇到不懂或者不会使用的命令可以使用docker --help查看文档

shell 复制代码
docker --help
如:
docker save --help
docker load --help

使用docker时需要特别注意防火墙端口占用


镜像相关命令

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖等打包而成。

shell 复制代码
docker images # 查看所有镜像

docker pull nginx   # 从云端(docker hub)拉取nginx镜像,没有指定tag则是最新

docker save -o ubuntu:20.04.tar nginx # 将镜像导出到磁盘

docker rmi nginx  # 删除镜像

docker load -i nginx  # 从磁盘中载入镜像

... #更多使用 参看 docker --hlep

容器相关命令

容器相当于一个只能运行当前镜像的一个微系统,只包含镜像运行所需要的lib库、依赖、bash等文件。

shell 复制代码
# --name:容器名称 -p: 宿主机端口 映射 容器内端口 -d:后台运行容器
docker run --name mynginx-p 20000:22 -d nginx 

docker ps  # 查看所有运行中的容器
docker ps -a # 查看所有容器

docker logs mynginx # 查看容器日志
docker logs -f mynginx # -f 跟踪日志输出,实时监控

docker pause mynginx # 挂起(暂停)容器
docker unpause mynginx # 恢复原本状态容器

docker stop mynginx # 停止容器

docker rm mynginx # 删除容器
docker rm -f mynginx # 强制删除容器,不建议

# exec: 进入容器内部执行一个命令  -it:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
docker exec -it mn bash # 进入mn容器,执行bash命令, exit可以退出容器

.... #更多使用 参看 docker --hlep

有些镜像可能会比较难创建和使用容器,如果发现使用run命令并且去查看状态并没有启动时,可以参看镜像的使用文档或者百度

在docker hub:https://hub.docker.com/_/nginx中查看镜像时,可以发现底下会有使用容器的教程的


数据卷

数据卷可以使得宿主机和容器文件做一个映射。用户只操作宿主机文件就可以达到修改容器中的文件,达到用户操作和容器的解耦合,用户不需要进入容器中修改文件。

shell 复制代码
docker volume --help	# 查看数据卷的帮助文档
docker volume create html	# 创建一个或多个数据卷

docker volume ls	# 查看所有数据卷
docker volume inspect html	# 显示一个或多个数据卷的详细信息

docker volume prune 	# 删除所有未被使用的本地数据卷
docker volume rm html 	# 删除一个或多个数据卷

在启动时可以使用-v volumeName:/targetContainerPath参数来挂载(映射)数据卷

shell 复制代码
docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx # -v 数据卷:需要映射容器中的文件
# 如果数据卷没有创建,docker会自动创建。

挂载成功后,修改挂载点中的文件,容器中的文件也会跟着改变


Dockerfile自定义镜像:Dockerfile参考文档

编写DockerFile文件

shell 复制代码
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝运行环境jdk 和 java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

编辑完DockerFile文件后,使用 docker build 开始构建

shell 复制代码
# -t: 镜像名:tag  ./: Dockerfile所在的文件夹
docker buld -t javaweb:1.0 ./

由于有分层的概念,构建时可以使用别的基础镜像

shell 复制代码
 # 指定基础镜像
FROM java:8-alpine  

 #项目
COPY ./docker-demo.jar /tmp/app.jar

# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

如果发现服务怎么都起不来,可以检查下内存是否足够

shell 复制代码
top # 可以查看内存
df -h # 查看磁盘内存
相关推荐
浮槎来2 分钟前
光伏组件的PID学习
运维·学习·硬件工程·光伏
热爱专研AI的学妹19 分钟前
DataEyes API:一站式大模型聚合网关,600 + 模型统一调用与负载均衡实战方案
运维·负载均衡
cyber_两只龙宝21 分钟前
【Oracle】Oracle之SQL中的单行函数
linux·运维·数据库·sql·云原生·oracle
成都被卷死的程序员24 分钟前
RustDesk 自建远程控制服务器部署全记录(含错误排查与最终方案)
运维·服务器
小宋00131 分钟前
Ubuntu Terminator(多开并行终端工具)
linux·运维·ubuntu
Wyawsl37 分钟前
keepalived高可用与负载均衡笔记
运维·笔记·负载均衡
小尔¥38 分钟前
keepalived高可用与负载均衡
linux·运维·负载均衡
残 风1 小时前
linux(Xshell、Xterm)如何搭建隧道间接访问目标服务网站教程
linux·运维·php·信息与通信
说实话起个名字真难啊1 小时前
Docker 入门之overlay网络
网络·docker·容器
老卢聊运维1 小时前
从零理解 CRD 与 Operator:如何扩展 Kubernetes
容器·kubernetes