docker
基础常用命令
-
导入镜像
-
方式1
docker import kylin_sp2.tar.xz kylin-build:build-hs-220824
-
方式2
[root@ccc64 caojingjing]# cat kylin_sp2.tar.xz | docker import - kylin-build:build-hs-220824 sha256:c02cba7686b88e633eff58cddba3189712cbe7f449f2fd37b2033158a9405e7b
-
-
查看docker镜像
-
[root@ccc64 caojingjing]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 5fdee3cda69c About a minute ago 2.02GB kylin-build build-hs-220824 c02cba7686b8 5 minutes ago 2.19GB centos-build build-hs-iso_767 fcda81fcbb37 4 hours ago 643MB
-
-
运行容器
-
# -it 表示 与容器进行交互式启动 -d 表示可后台运行容器 (守护式运行) --name 给要运行的容器 起的名字 /bin/bash 交互路径 docker run -it -d --name 要取的别名 镜像名:Tag /bin/bash
-
[root@ccc64 caojingjing]# docker run -it -d --name hs-libvirt-build kylin-build:build-hs-220824 /bin/bash 5af66064d291fbc40df53045ee04a9de827fd8c8e1ea6290a96f1b36c19fd397
-
-
查看后台容器
-
[root@ccc64 caojingjing]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5af66064d291 kylin-build:build-hs-220824 "/bin/bash" 43 seconds ago Up 42 seconds hs-libvirt-build ff524790a6a3 centos-build:build-hs-iso_767 "/usr/sbin/init" 4 hours ago Up 4 hours build-hs-iso_767 45ce5328d690 centos-build:build-hs-iso_762 "/usr/sbin/init" 6 hours ago Up 6 hours build-hs-iso_76
-
-
进入容器
-
方式一 (推荐)
docker exec -it 容器名/容器ID /bin/bash
[root@ccc64 caojingjing]# docker exec -it hs-libvirt-build /bin/bash [root@5af66064d291 /]#
-
方式二
docker attach 容器名/容器ID
-
-
将宿主机文件COPY到容器中
-
docker cp 文件路径 容器id:容器中存在文件路径
-
-
添加历史记录,基于容器创建镜像,保存历史合并新层,基于容器创建(创建新镜像)
OPTIONS说明:
- **-a 😗*提交的镜像作者;
- **-c 😗*使用Dockerfile指令来创建镜像;
- **-m 😗*提交时的说明文字;
- **-p 😗*在commit时,将容器暂停
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] docker commit -a "cjj" -m "add qemu and libvirt compile evironment" 718401b42ec4 ctyun-build:build-hs-230314
-
查看docker的历史提交记录
-
docker history 镜像ID
-
-
导出/导入镜像
-
导出镜像到一个文件,不带历史,基于容器创建(迁移容器)
docker export 容器ID > xxximg.tar docker import ...
-
导出镜像到指定文件(分享镜像)
docker save [options] images [images...]
docker save docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3 注:不要docker save <IMAGE ID> -o <repository>.tar(会导致载入镜像后名字标签都为<none>) 如果出现none,可通过增加名字标签,docker tag <IMAGE ID> <repository>:<tag>
就是说如果用export指令导出,镜像历史提交记录就没了;但是用save,历史提交记录还在
-
导入指定文件为镜像
docker load docker load < busybox.tar.gz
可以依据具体使用场景来选择命令
若是只想备份images,使用save、load即可
若是在启动容器后,容器内容有变化,需要备份,则使用export、import
-
-
修改tag名称
-
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] [root@ccc64 ~]# docker tag hs-libvirt-build kylin-build:v1 Error response from daemon: No such image: hs-libvirt-build:latest [root@ccc64 ~]# docker tag hs-libvirt-build:v1 kylin-build:v1 [root@ccc64 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos-build build-qemu_44 164f6fcf5047 2 minutes ago 1.86GB hs-libvirt-build v1 7ae693d9eeee 8 minutes ago 3.35GB kylin-build v1 7ae693d9eeee 8 minutes ago 3.35GB
-
-
删除镜像
-
docker rmi:用于删除一个或者多个镜像
-
如上出现两个ID一样的,这要怎么搞呢
docker rmi hs-libvirt-build:v1 [root@ccc64 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE kylin-build v1 7ae693d9eeee 19 minutes ago 3.35GB centos-build build-qemu_42 16b7a844e49a 24 minutes ago 1.87GB centos-build build-hserver-rpms_327 3135e3411d4e About an hour ago 1.87GB kylin-build build-hs-220824 c02cba7686b8 2 hours ago 2.19GB
-
-
停止容器
- docker stop NAMES
-
删除容器
- docker rm:用于删除一个或者多个容器
docker file
创建第一个 Dockerfile,需要理解 file 的组成
以下是需要指定的命令
-
FROM - 定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。
-
RUN - 用于执行后面跟着的命令行命令。有以下俩种格式:
-
shell 格式:
RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
RUN ["可执行文件", "参数1", "参数2"] # 例如: # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline
-
注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz “http://download.redis.io/releases/redis-5.0.3.tar.gz”
RUN tar -xvf redis.tar.gz以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum -y install wget
&& wget -O redis.tar.gz “http://download.redis.io/releases/redis-5.0.3.tar.gz”
&& tar -xvf redis.tar.gz如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
-
制作 docker 镜像
- DockerHub 上有很多的镜像,可以满足大部分的需求。这种情况我们就可以直接通过
docker pull **
从DockerHub上获取对应的镜像 (但如果没有找到想要的 docker image,我们可以自己制作) - tar 完成系统压缩包 1、可以选择
/
跟目录,然后--exclude
排除不需要的目录- tar -cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=run --exclude=boot .
常见问题
- 使用docker images时,可能会出现REPOSITORY和TAG均为none的镜像
解决方式:docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
-
docker 空间不足
解决方式:修改 docker 存储的默认路径,docker info 查看,修改配置文件
/etc/docker/daemon.json
{ ... "data-root": "/data/docker/", ... }
systemctl restart docker
-
修改配置文件,只对新创建的 docker 有效