搜索镜像
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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于