systemctl start docker
systemctl status docker
systemctl restart docker
systemctl enable docker
类似面向对象中的类
docker images
docker images -q
(-q 查看所有镜像的ID)
docker search XXX:XXX
名字:版本号
docker pull redis:5.0
名字:版本号
docker rmi xxx
名字或ID
容器类似面向对象中的实例
通过镜像创建容器类似类的实例化
docker run -i -t --name='名字' 镜像名 /bin/bash
docker run -it --name='名字' 镜像名 /bin/bash
docker run -it --name '名字' 镜像名 /bin/bash
(以上三种等价)
-i: 一直运行
-t: 分配伪终端
docker run -i -d --name '名字' 镜像名 /bin/bash
-d: 后台建立容器
后台建立的容器,exit后不会关闭
-it: 交互式容器
-id: 守护式容器
查看运行的docker容器
docker ps
查看历史容器
docker ps -a
docker exec -it '容器名或者id' /bin/bash
docker stop '容器名或者id'
docker start '容器名或id'
docker rm '容器名或id'
docker inspect '容器名或id'
容器中数据交互存在的主要问题
容器内数据存储?
容器内外数据交互?
容器间数据交互?
数据卷的存在解决这些问题。
使用-v 既可设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件)...
目录容器内需为绝对路径
目录不存在会自动创建
可以挂载多个数据卷,也就是可以使用多个-v
例:
docker run -it --name test1 -v /root/data:/root/data centos:7 /bin/bash
挂载后数据会持久化存在。
创建数据卷容器
docker run -it --name c1 -v/volume centos:7 /bin/bash
关联数据卷
docker run -it --name c2 --volumes-from c1 centos:7 /bin/bash
主要以下几个步骤
搜索镜像
拉取镜像
创建容器
操作容器
# 搜索镜像
docker search mysql
# 拉取镜像
docker pull mysql:5.6
# 创建容器
docker run -id -p 3307:3306 --name c_mysql -v ... -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 ...
-p 3307:3306 将容器3306端口映射到宿主机3307端口
-e MYSQL_ROOT_PASSWORD=123456 初始化root用户密码
# 操作容器
数据库操作
# 搜索镜像
docker search tomcat
# 拉取镜像
docker pull tomcat
# 创建容器
docker run -id --name c_tomcat -p 8080:8080 ... tomcat ...
-p 8080:8080 将容器8080端口映射到宿主机8080端口
# 操作容器
Tomcat操作
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx
# 创建容器
docker run -id --name c_nginx -p 80:80 -v ... nginx ...
-p 80:80 将容器80端口映射到宿主机80端口
# 操作容器
nginx操作
# 搜索镜像
docker search redis
# 拉取镜像
docker pull redis:5.0
# 创建容器
docker run -id --name c_redis -p 6666:6666 -v ... redis:5.0 ...
-p 6666:6666 将容器6666端口映射到宿主机6666端口
# 操作容器
Redis操作
外部机器连接Redis
./redis-cli.exe -h 192.168.XX.XX -p 6666
Linux:文件系统两个部分组成
bootfs
bootloader 引导加载程序
kernel 内核
rootfs
不同linux发行版,bootfs基本一致,rootfs不同。
容器转为镜像
dockerfile
转换为新的镜像
docker commit 容器id 镜像名称:版本号
分享镜像
docker save -o 压缩文件名称 镜像名称:版本号
2. 解压镜像
docker load -i 压缩文件名称
非目录挂载的文档会继续存在。
FROM scratch
ADD centos-7-xc86__64-cockcer.tair.xz /
LABEL org.label-schemo.schema-version--1.0- \
ong.label-schema.inamme--Centos
CMD[-/bin/bssh""]
FROM 指定父镜像
MAINTAINER 作者信息
LABEL 标签
RUN 执行命令
CMD 容器启动命令
ENTRYPOINT 入口
COPY 复制文件
ADD 添加文件
ENV 环境变量
ARG 构建参数
VOLUME 定义外部可挂载的数据卷
EXPOSE 暴露端口
WORKDIR 工作目录
USER 指定执行用户
HEALTHCHECK 健康检查
ONBUILD 触发器
STOPSIGNAL 设置发送容器的系统调用信号以退出
SHELL 指定执行脚本的shell
需求:
自定义centos7镜像,要求:
默认登录路径为/usr
可以使用vim
实现过程:
定义父镜像: FROM centos:7
定义作者信息:MAINTAINER name
执行安装vim命令:RUN yum install -y vim
定义默认的工作目录:WORKDIR /usr
定义容器启动执行的命令:CMD /bin/bash
通过Dockerfile构建docker镜像
docker build -f 'dockfile路径' -t '新镜像名称版本' .
寻址路径
定义父镜像: FROM java:8
定义作者信息:MAINTAINER name
将jar包添加到容器:ADD springboot.jar app.jar
文件名 镜像中的名字
定义容器启动执行的命令:CMD java -jar app.jar
通过Dockerfile构建docker镜像
docker-compose.yaml
创建./nginx/conf.d 目录
目录下编写 itheima.conf 文件
启动:
docker-compose up
# 1.拉取私有仓库镜像
docker pull registry
# 2.启动私有仓库镜像
docker run -id --name registry -p 5000:5000 registry
# 3.检查私有仓库是否创建成功
http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]}表示私有仓库创建成功
# 4. 修改daemon.json 信任私有仓库
{"insecure-registries": ["私有仓库服务器ip:port"]}
# 5. 重启docker服务
systemctl restart docker
docker start registry
# 1.标记镜像为私有仓库镜像
docker tag centos:7 私有IP:port/centos:7
# 2.上传标记的镜像
docker push 私有IP:port/centos:7
docker pull 私有ip:port 镜像名