搜索镜像
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='{}' 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
Q.E.D.