docker常用操作
一、镜像操作
1. 获取一个新的镜像:
当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull
命令来下载它。
2. 查找镜像:
- 官方镜像仓库:https://hub.docker.com/
- 国内镜像仓库:https://registry.docker-cn.com
- 我们的镜像仓库:https://harbor.loongnix.cn
可以使用上面的网站查找想要的镜像,也可以在终端使用docker search
命令搜索,如果要想在指定的仓库搜索,需要更改默认仓库地址。
3. 更改默认仓库地址:
mkdir -p /etc/docker/
tee /etc/docker/daemon.json <<-‘EOF’
{
“insecure-registries”:[“harbor.loongnix.cn”]
}
EOF
4. 列出镜像列表:
docker images
5. 删除镜像:
删除单个镜像: docker rmi <IMAGE ID>
命令,如sudo docker rmi 94bc0bf34bdd
6. 设置镜像标签:
在原有镜像的基础上,为镜像添加一个新的名字,不改变原来的镜像名。
docker tag <container_id> new_name,如sudo docker tag 94bc0bf34bdd loongnix:20
7. 更新镜像:
在已有镜像的基础上,使用容器的副本,创建一个新的镜像,具体操作如下:
- 更新镜像之前,我们需要使用镜像来创建一个容器。
- 然后在运行的容器内使用
apt-get update
命令进行更新。 - 完成操作之后,输入
exit
命令来退出这个容器。 - 然后通过命令
docker commit
来提交容器副本。
如:$ docker commit -m="Description" -a="Author_name" <container_id> images_name
-m
: 提交的描述信息-a
: 指定镜像作者<container_id>
:容器 IDimages_name
: 指定要创建的目标镜像名
8. 构建镜像:
在已有镜像的基础上,利用Dockerfile
文件,创建一个新的镜像,可以在创建时为其指定相关命令,下载我们需要的东西。具体步骤是:
- 编写
Dockerfile
文件 - 执行
docker build
命令。
$ cat Dockerfile
FROM loongnix:20
COPY . /
RUN apt install -y unzip make gcc wget git libpcre3 libpcre++
CMD ["/build.sh"]
FORM:定制的镜像都是基于FROM的镜像。这里的loongnix就是定制需要的基础镜像,后续的操作都是基于loongnix,所以loongnix必须是一个已经存在的镜像,如果镜像列表(docker images)中没有loongnix,可以用它来设置一个镜像标签( docker tag)。
COPY:从构建环境复制文件或者目录到镜像上指定的路径,.是Dockerfile所在目录下的所有文件,/是镜像的根目录。
RUN:用于执行后面跟着的命令行命令,在docker build时运行
CMD:类似于 RUN 指令,不过是在docker run时运行。作用是为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖,如果 Dockerfile 中存在多个 CMD 指令,仅最后一个生效。
命令docker build --no-cache -t lua-min:0.0.1 .
-t
:指定要创建的目标镜像名lua-min:0.0.1
:创建的新的镜像名.
:Dockerfile
文件所在目录,可以指定Dockerfile
的绝对路径
9. 使用镜像创建一个容器:
命令docker run -t -i [--privileged] [--name container_name][-v /home/loongson/docker_share:/mnt] IMAGE_ID /bin/bash
-i
: 交互式操作-t
: 终端--name
:指定容器名称-v
: 在容器中设置了一个挂载点/mnt
(就是容器中的一个目录),并将主机上的/home/xxx/xxx
目录中的内容关联到/mnt
下- 在构建容器时多加一个
--privileged
参数可使container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
二、容器操作
1. 查看容器列表:
docker ps -a
2. 启动容器:
docker start <container_id>
3. 重启容器:
docker restart <container_id>
4. 停止容器:
下面是重启单个容器,也可以用删除多个容器的方法,停止多个容器。
docker stop <container_id>
5. 进入容器:
docker attach <container_id>(exit退出容器终端,容器会停止)
docker exec -it <container_id> /bin/bash(exit退出容器终端,不会导致容器的停止)
6. 退出容器(容器还在):
在容器终端输入exit
7. 删除容器:
删除的容器必须要停止,不然无法删除。
删除单个容器:docker rm -f <container_id>
删除多个容器,如删除由76d96b0d951c
镜像创建的所有容器:
docker ps -a | grep "76d96b0d951c" | awk '{print $1}' | xargs docker rm
8. 复制容器:
使用导入导出容器进行复制
docker export name/id > xxx.tar
docker import xxx.tar IMAGE_NAME
docker run -it [--privileged] IMAGE_ID/IMAGE_NAME /bin/bash
在构建容器时多加一个 --privileged
参数可使container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
9. 传送文件:
Docker容器向宿主机传送文件:docker cp <container_id>:<docker容器内的路径> <本地保存文件的路径>
宿主机向Docker容器传送文件:docker cp 本地文件的路径 <container_id>:<docker容器内的路径>
10. 容器日志
docker logs [OPTIONS] CONTAINER
OPTIONS
-f #跟踪日志输出
--since #显示某个开始时间的所有日志
-t= #显示时间戳
--tail #仅列出最新N条容器日志
docker inspect --format='{{.LogPath}}' <容器ID> #查看日志文件位置
docker logs --tail=10 <容器ID> # 查看最新的10条日志
docker logs --since="2016-07-01" --tail=10 mynginx #查看容器mynginx从2016年7月1日后的最新10条日志