搜索镜像 docker search MySQL -s 100 列出关注数大于 100 的 MySQL 镜像,等价于 docker search MySQL --filter=stars=100 docker search --no-trunc CentOS 显示完整的描述信息 下载镜像 docker pull 镜像名 ..

docker 入门常用指令

搜索镜像

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

    308 引用 • 717 回帖 • 520 关注
回帖
请输入回帖内容...