Docker常用命令以及Dockerfile制作

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker常用命令以及Dockerfile制作
docker重启
systemctl restart docker
查看当前有的镜像
docker images
查看容器
docker ps
删除镜像
docker rmi -f 镜像id
删除容器
docker rm 容器id
搜索镜像
docker search 容器id
删除容器(-f强制删除,正在运行的容器也删除)
docker rm -f {containerID}
从镜像仓库中拉取或者更新指定镜像:
docker pull 
杀掉一个运行中的容器
docker kill 容器id
启动容器
docker start 容器ID
停止容器
docker stop 容器ID
重启容器:
docker restart 容器ID
运行springboot
docker run -p 8080:8083 -t hello-docker
-- 8080 是外部暴露的端口
-- 8083 docker里面的项目的端口
打包镜像
docker save hello:v1 -o hello.tar
镜像加载
docker load -i hello.tar
推送到镜像仓库
docker push xxx:version
修改版本
docker tag imageId com.xxx/xx.tar
docker将容器内的目录复制到本地
docker cp 容器号:/路径 /本地路径
例如:dcoker cp e90660a4331f:/go/src E:/project/www/go
docker自动启停命令
docker update 容器名称 --restart=always
docker启动里面服务获取参数
SpringBoot 配置文件写 ${address}:3306
实际启动:
docker run -it xxx:latest --address=127.0.0.1 ###这样就可以动态的获取变量了
进入容器
docker exec -it 容器名称 bash
docker exec -it 容器名称 bash
docker container exec -it 容器id /bin/bash  
退出
ctrl+d或者exit
启动所有容器
docker start `docker ps -a -q`
删除所有容器
docker stop `docker ps -a -q`
docker rm `docker ps -a -q`
删除所有镜像
docker rmi `docker images -q`
删除数据卷
docker volume rm my-vol
docker volume ls
无主的数据卷可能会占据很多空间,要清理请使用以下命令
docker volume prune
docker删除未使用到的镜像
docker image prune -a
查看网络
docker network ls
查看网络详细信息
docker inspect 网络名
Docker容器安装软件和中使用国内镜像
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian buster main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian-security buster/updates main" >> etc/apt/sources.list 
echo "deb http://mirrors.aliyun.com/debian buster-updates main" >> /etc/apt/sources.list 
然后更新
1、更新 apt-get
apt-get update
apt-get upgrade
2、yum
apt install yum
3、vim
apt install vim
4、ifconfig
apt install net-tools
5、ping
apt install iputils-ping
6、ps
apt-get install procps
不启动容器进入镜像中
docker run -it --entrypoint bash openjdk:8
Docker查找在线查找镜像命令
docker search java
查看日志
docker logs -f 2950b6f847c0
查看运行容器的状态
docker ps -a
 
 CONTAINER ID   IMAGE          COMMAND                  CREATED              STATUS                          PORTS      NAMES
2950b6f847c0   2f66aad5324a   "docker-entrypoint.s…"   About a minute ago   Up About a minute               6379/tcp   redis
9d82c13fef77   2f66aad5324a   "docker-entrypoint.s…"   About a minute ago   Exited (1) About a minute ago              compassionate_johnson
3db7cfbe0519   2f66aad5324a   "docker-entrypoint.s…"   2 minutes ago        Exited (1) About a minute ago              sharp_montalcini
34f77d9f0413   openjdk:8      "bash"                   37 hours ago         Exited (1) 36 hours ago                    magical_bardeen
STATUS : Exited (1) 非正常退出 Exited (0) 容器运行完自动销毁
NAMES: 运行容器的名称
使用Dockerfile构建镜像
docker build -t my-docker:latest . # .表示当前目录
#基于dockerfile文件构建镜像命令
完整的写法: docker build -f dockerfile -t nginx:new . 
docker build : 基于dockerfile 构建镜像
-f :指定dockerfile 文件(默认不写的话指的是当前目录)
-t :(tag) 打标签 ——》nginx:new 
.  :专业说法:指的是构建镜像时的上下文环境,简单理解:指的当前目录环境中的文件
搭建私有镜像仓库
# 拉取镜像
docker pull registry:2
# 运行镜像
docker run -d -p 5000:5000 --restart always --name registry registry:2
# 打本地镜像tag
docker tag redis:latest localhost:5000/redis:latest
# 推送到本地镜像仓库
docker push localhost:5000/redis:latest
# 查看镜像仓库
[root@localhost ~]# curl localhost:5000/v2/_catalog
{"repositories":["redis"]}
Dockerfile 制作-1
#基于jdk1.8.0_191镜像
FROM jdk1.8.0_191:v1
#作者信息
MAINTAINER liupei
#将jar拷贝到容器中去
ADD springcloud-eureka.jar /opt
#赋予执行权限
RUN chmod +x /opt/springcloud-eureka.jar
#Java JVM 启动参数变量,这里需要在这里加一个时区参数。
ENV JAVA_OPTS="-Duser.timezone=Asia/Shanghai"
#暴露端口
EXPOSE 7001
#Spring 容器启动参数变量,方便后续操作时能通过此变量配置 Spring 参数
ENV APP_OPTS=""
#运行jar
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS  -jar /opt/springcloud-eureka.jar  $APP_OPTS" ]
Dockerfile 制作-1
#基于我们刚刚创建的jdk镜像
FROM jdk1.8.0_191:v1
#作者信息
MAINTAINER liupei
#将应用包拷贝进入容器
ADD springcloud-getwey.jar /opt
#赋予容器内应用程序执行的权限
RUN chmod +x /opt/springcloud-getwey.jar
#运行jar
CMD java -jar /opt/springcloud-getwey.jar
Dockerfile 制作-2使用其他镜像做为基础镜像
FROM www.xxx.xx/centos4.0.2_java8-x86:base
# 当前目录拷贝到 root路径
COPY . /root/
# 使用该基础镜像的时候执行这个脚本,给这个脚本分配权限
RUN ["chmod","+x" ,"/root/xx/xx.sh"]
# 使用该基础镜像的时候执行这个脚本
ONBUILD RUN ["/root/xx/xx.sh"]
Dockerfile 制作-3使用3作为基础镜像
FROM www.xx.xx/使用1制作的镜像:latest 
# 当前要执行的复制到容器/opt/
COPY . /opt/
 
RUN ["chmod","+x" ,"/opt/service-xx/install.sh"]
 
ENTRYPOINT ["/opt/service-xx/install.sh","执行参数"]
Dockerfile 制作-4制作基础镜像并安装其他依赖
FROM python:3.6
MAINTAINER liupei
RUN pip install thrift
Dockerfile操作指令
指令 含义
FROM [镜像] 指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令,例如centos:7。from有两层含义:①开启一个新的镜像②必须写的一行指令
MAINTAINER [名字] 说明新镜像的维护人信息(可写可不写)
RUN命令 每一条RUN后面跟一条命令,在所基于的镜像上执行命令,并提交到新的镜像中,RUN必须大写
CMD [“要运行的程序”,“参数1”、“参数2”] 指定启动容器时需要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能执行最后一条,“bin/bash”也是一条CMD,并且会覆盖image镜像里面的cmd。
EXPOSE [端口号] 指定新镜像加载到Docker时要开启的端口暴露端口,就是这个容器暴露出去的端口号。
ENV [环境变量] [变量值] 设置一个环境变量的值,会被后面的RUN使用。容器可以根据自己的需求创建时传入环境变量,镜像不可以。
ADD [源文件/目录] [目标文件/目录] ①将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,②或者是一个URL,③若源文件是压缩包则会将其解压缩
COPY [源文件/目录] [目标文件/目录] 将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中,copy只能用于复制,add复制的同时,如果复制的对象是压缩包,ADD还可以解压,copy比add节省资源
VOLUME [“目录”] 在容器中创建一个挂载点,简单来说就是-v,指定镜像的目录挂载到宿主机上。
USER [用户名/UID] 指定运行容器时的用户
WORKDIR [路径] 为后续的RUN、CMD、ENTRYPOINT指定工作目录,相当于是一个临时的"CD",否则需要使用绝对路径,例如workdir /opt。移动到opt目录,并在这下面的指令都是在opt下执行。
ONBUILD [命令] 指定所生成的镜像作为一个基础镜像时所要运行的命令*(是一种优化)**
HEALTHCHECK 健康检查
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。   相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
安全 Docker 容器
|
1天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
74 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
2月前
|
网络安全 数据安全/隐私保护 Docker
|
8天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
130 77
|
5天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
57 24
|
1月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
470 11
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
7天前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
70 6
|
17天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
36 9
|
2月前
|
存储 监控 安全
|
1月前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
90 3