一、镜像
1、创建镜像
在 dockfile 所在目录 执行下面命令
docker build -t docker-test .
注:docker-test 是我们给这个镜像起的名字
2、查看当前所有镜像
docker images
3、删除镜像
docker rmi 镜像标识(可以是镜像短id、镜像名、镜像长id)
docker rmi docker-test
4、重命名镜像
docker tag 镜像ID 新镜像名称:新镜像标签
docker tag 2b9bd146441d swoft:swoft-tag
5、打包镜像
[root@v2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
openjdk8 latest 1256ea709cc1 3 weeks ago 320 MB
zookeeper latest 2e2f6a1661fd 6 weeks ago 270 MB
pxc latest f1439de62087 3 years ago 413 MB
replication latest f904ca3022d7 3 years ago 408 MB
[root@v2 ~]# docker save pxc > pxc.tar
6、加载镜像
docker load < pxc.tar
二、网络
1、查看 docker 当前拥有的网络类型
docker network ls
2、创建自定义网络
docker network create --subnet=172.10.0.0/16 haveyb-network
三、容器
1、构建容器
docker run -itd --name 自定义容器名 --net 自定义网络类型 -p 6380:6379 --ip 172.10.0.2 使用的镜像名
举例:docker run -itd --name redis-master --net haveyb-network -p 6380:6379 --ip 172.10.0.2 docker-test
参数解释:
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d: 后台运行容器,并返回容器ID;
--name: 为创建的容器命名
--net: 指定网络模式(这里指定刚才创建的自定义网络模式)
-p: 端口映射,格式为:主机(宿主)端口:容器端口
--ip: 为容器制定一个固定的ip
2、查看运行中的容器
docker ps -a
3、查看某个网络类型下,容器的地址
docker network inspect 网络类型名称
docker network inspect haveyb-network
4、进入容器
docker exec -it 容器名 bash
docker exec -it redis-master bash
5、退出容器
exit
6、停止容器
docker stop 容器名
docker stop redis-slave3
7、开启容器
docker start 容器名
docker start redis-slave3
8、删除容器
docker rm 容器ID
9、重命名容器
docker rename 容器ID 新容器名称:新容器标签名
docker rename 31c0472cb0bd swoft-1:w1
默认docker中的linux是不支持clear操作的,可以通过 yum install -y ncurses 来安装扩展,进而可以使用clear、vim等命令
四、宿主机与容器之间文件互传
1、宿主机向容器传文件
将宿主机的 index.php 拷贝到 容器名为 swoft 的 /data 目录下
docker cp index.php swoft:/data
2、容器向宿主机传文件
将容器名为 swoft 的容器的 /data/index.php 文件拷贝到 宿主机的 /data 目录下
docker cp swoft:/data/index.php /data
特别注意:这两条命令都是在宿主机上执行的,而不是在容器里执行的
五、基于容器的打包和加载
上面是基于镜像的打包和加载,现在介绍基于容器的打包和加载。
# 将容器导出为镜像
docker export mysql8.0 > mysql8.0.tar
# 导入压缩包为镜像
cat mysql8.0.tar | docker import - mysql8.0
注意:这里使用docker export实际上是将一个容器导出为一个镜像压缩包了,之后再使用docker import命令或docker load命令进行导入时,实际上也是导入了一个镜像,而不是导入了一个容器,这点需要知晓。
注:docker load和docker import的区别:
用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。
此外,从容器快照文件导入时可以重新指定标签等元数据信息。
但事实上,使用上其实并没有多大差异,更推荐使用docker save 搭配docker load。