docker 入门常用指令

本贴最后更新于 1646 天前,其中的信息可能已经时移俗易

搜索镜像

docker search mysql -s 100 列出关注数大于 100 的 mysql 镜像,等价于 docker search mysql --filter=stars=100   
docker search --no-trunc centos 显示完整的描述信息  

下载镜像

docker pull 镜像名

查看本地镜像

docker images    列出镜像  
docker images -q 只显示 id  

创建容器

docker run【options】 镜像名:标签名  
* -i 表示交互式运行容器,通常与 t 同时使用    
* -t 启动后会进入容器命令行,通常与-i 同时使用  
* --name 为创建的容器指定一个名称  
* -d 创建一个守护式容器在后台运行,并返回容器 di  
* -v 表示目录映射, 格式为: -v 宿主机目录:容器目录  
* 表示端口映射,格式为: -p 宿主机端口:容器端口 

    示例:  
    docker run -it --name=mycentos centos
    docker run -id --name=mycentos2 centos

查看容器

docker ps 查看正在运行的容器  
docker ps -a 查看所有容器  等价于 docker container ls -a  
docker ps -l 查看最后一次运行的容器  
docker ps -f status=exited 查看停止的容器   
docker ps -a -q 查询所有运行过的容器 id  

登录容器

docker exec -it 容器名称 | 容器 id /bin/bash  

    示例:
    docker exec -it mycentos2 /bin/bash

此时使用 exit 退出也不会停止容器

退出容器

exit 退出并停止当前容器  
ctrl+p+q 退出不停止当前容器  

停止和启动容器

docker start 容器名称或容器 id  
docker start `docker ps -a -q` 启动所有运行过的容器  
docker stop 容器名称或容器 id 停止指定容器(正常停止)  
docker kill 容器名称 | 容器 id  强制停止指定容器  
docker stop `docker ps -a -q` 停止所有正在运行的容器  

删除镜像和容器

docker rm 容器名称 | 容器 id  删除容器  
docker rm `docker ps -a -q` 删除所有容器  
docker rmi 镜像名称 | 镜像 id  删除镜像  
docker rmi `docker images -q` 删除所有镜像  

拷贝宿主机与容器中的文件

docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录  
docker cp 容器名称:要拷贝的容器文件或目录 宿主机文件或目录  

数据目录挂载

docker run -id -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名  
docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名 (只有只读权限)  

    示例:
    docker run -id -v /home/docker/tmp/:/ttmp --name=mycentos2 centos
    docker run -id -v /dataHost:/dataContainer:ro --name=mycentos4 centos:7

查看容器内部细节

docker inspect 容器名称 | 容器 id  也可以查看镜像的信息,docker inspect 镜像id 

    示例:
    docker inspect mycentos2

    docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2 查看容器 IP

实战

    docker run -id --name=mymysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql 创建 mysql 实例
    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口  
    -e 代表添加环境变量, MYSQL_ROOT_PASSWORD 是 root 用户的登陆密码

    docker run -id --name=myredis -p 6379:6379 redis 创建 redis 实例

    docker run -id --name mytomcat -p 6666:8080 -v /home/docker/tmp/webapps:/usr/local/tomcat/webapps/ --privileged=true tomcat 创建 tomcat 实例
    
    -p 表示地址映射, 宿主机端口号:容器运行端口号
    -v 表示地址映射, 宿主机目录:容器映射目录
    --privileged=true 如果映射的是多级目录,防止有可能会出现没有权限的问题,所以加上此参数

    docker pull rabbitmq:management  注意:如果 docker pull rabbitmq 后面不带 management,启动 rabbitmq 后是无法打开管理界面的,所以我们要下载带 management 插件的 rabbitmq.
    
    docker run -id --name=myrabbitmq1 -p 5672:5672 -p 15672:15672 rabbitmq:management  创建 rabbitmq 实例,使用默认密码,远程连接端口 5672,管理系统访问端口 15672,默认用户名: guest ,密码也是 guest
    docker run -id --name=myrabbitmq2 -e RABBITMQ_DEFAULT_USER=suixin -e RABBITMQ_DEFAULT_PASS=suixin -p 5672:5672 -p 15672:15672 rabbitmq:management    创建 rabbitmq 实例,并指定密码

dockerfile

    FROM scratch # 基础镜像,scratch 相当于 java 中的 Object
    ADD centos-7-x86_64-docker.tar.xz / # centos

    LABEL org.label-schema.schema-version="1.0" \ # 标签说明
        org.label-schema.name="CentOS Base Image" \
        org.label-schema.vendor="CentOS" \
        org.label-schema.license="GPLv2" \
        org.label-schema.build-date="20190305"
    
    CMD ["/bin/bash"]    # 默认执行的命令,创建运行容器时最后会加上 /bin/bash,
                        # 所以创建容器时,可不加 /bin/bash ,即如下:
                        # docker run -it --name=mycentos0 centos:7
                        # 如果加了,则在后面采用我们自己加的命令执行/bin/bash

语法规则  
1. 每条指令的保留字都必须为大写字母且后面至少要有一个参数  
2. 执行顺序按从上往下执行。  
3. # 用于注释  
4. 每条指令都会创建一个新的镜像层,并对镜像进行提交  
执行流程  
1. Docker 从基础镜像运行一个容器  
2. 执行每一条指定并对容器作出修改  
3. 执行类似 docker commit 的操作提交一个新的镜像层  
4. docker 再基于刚提交的镜像运行一个新容器  
5. 执行 Dockerfile 中的下一条指令直到所有指令都执行完成  

通过 Dockerfile 构建镜像

    docker build [-f 指定 Dockerfile 所在路径与文件名] -t 生成的镜像名:标签名 .

    注意后边的 空格 和点 . 不要省略, . 表示当前目录  
    -f 指定 Dockerfile 文件所在路径与文件名。如果未指定 -f 值,则找当前目录下名为 Dockerfile 的构建文件

实战(创建 jdk 镜像)

创建一个目录,把 jdk 压缩包放目录内,在该目录中创建一个 Dockerfile 文件,内容为:

    #来自基础镜像
    FROM centos:7
    #指定镜像创建者信息
    MAINTAINER suixin
    #切换工作目录 /usr/local
    WORKDIR /usr/local
    #创建一个存放 jdk 的路径
    RUN mkdir /usr/local/java
    #将 jdk 压缩包复制并解压到容器中/usr/local/java
    ADD jdk-13_linux-x64_bin.tar.gz /usr/local/java
    
    #配置 java 环境变量
    ENV JAVA_HOME /usr/local/java/jdk-13
    ENV PATH JAVA_HOME/bin:PATH
    
    CMD ["/bin/bash"]

然后执行:docker build -t jdk:13 .

创建容器:docker run -it --name=myjdk13 jdk:13 /bin/bash

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    476 引用 • 899 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...