1. 基本命令
docker version:查看版本信息
docker login:若不指定地址,则默认是 dockerhub
docker login <docker仓库地址> -u <用户名> -p <密码>: 登录
docker logout:退出
docker search <镜像名>:搜索镜像
docker pull <镜像名>:拉取镜像到本地
docker push <镜像名:tag名>:推送镜像到仓库
docker run <镜像名或 ID>:运行镜像
docker start <容器名或 ID>:启动容器
docker stop <容器名或 ID>:停止容器
docker restart <容器 ID>:重启容器
docker run -itd ubuntu /bin/bash
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
-i: 交互式
-t: 终端,要退出终端,直接输入 exit
-d: 后台运行
不加 -d 直接进入终端,加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
-P: 将容器内部使用的网络端口随机映射到我们使用的主机上。
-p 80:8080 :吧将容器的 8080 端口,映射到主机的 80 端口,也可以网址端口一起映射,如下:
-p 127.0.0.1:5001:5000,这样我们就可以通过访问 127.0.0.1:5001 来访问容器的 5000 端口。
默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
docker attach <容器 ID>:进入容器,但是 exit 后,容器会停止
docker exec <容器 ID> /bin/bash:进入容器,exit 后,容器不会停止,推荐
docker rm <容器 ID>:移除容器
docker rm -f <容器 ID>:强制移除容器,如果某个容器用 docker stop、docker kill 都无法停止,可以用这个命令强制停止和删除容器
docker rmi <镜像 ID>:移除镜像
docker container prune: 清理掉所有处于终止状态的容器
*删除停止的容器
sudo docker rm -v $(sudo docker ps -aq -f status=exited)
*删除所有没有容器引用的镜像
sudo docker rmi $(sudo docker images | grep "none" | awk '{print $3}'); //分号要保留
sudo docker rmi -f id
*标记本地镜像,将其归入某一仓库
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
docker tag test:1.0 myhost/test:v1:将 test:1.0 镜像标记为 myhost/test:v1
docker build 命令用于使用 Dockerfile 创建镜像
2. 导入导出
2.1 导出容器快照
docker export <容器 ID> > ubuntu.tar: 导出镜像,导出容器快照到本地文件 ubuntu.tar(以 ubuntu 为例)。
2.2 导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
此外,也可以通过指定 URL 或者某个目录来导入,例如:
docker import http://example.com/exampleimage.tgz example/imagerepo
3. 容器信息
docker port <容器名或id>:查看指定容器端口
docker logs <容器名或id>:查看容器日志,参数如下
Options:
--details 显示更多的信息
-f, --follow 跟踪实时日志
--since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟)
--tail string 从日志末尾显示多少行日志, 默认是all
-t, --timestamps 显示时间戳
--until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟)
docker images:查看所有镜像
docker ps:查看本地运行中的容器,常用参数如下
-a:查看本地所有容器
-l:查看本地最后启动的容器
docker inspect <容器名或 ID>:查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
4. 容器互联
4.1 创建、查询 network
docker network create <network名>:创建 network,用于镜像之间访问(可以简单理解为分组),同一个 network 下的镜像之间可以访问,从而使同一个 network 的镜像,用 exec 进入到容器中,可以相互 ping 通。
-d:参数指定 Docker 网络类型,有 bridge、overlay。
其中 overlay 网络类型用于 Swarm mode。
sudo docker network ls: 查看已有 network
4.2 连接容器
通过 --network 指定网络
docker run -itd --name test1 --network test-net ubuntu /bin/bash
5. 配置 DNS
5.1 配置 docker DNS
我们可以在宿主机的 /etc/docker/daemon.json 文件中增加以下内容来设置全部容器的 DNS:
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
设置后,启动容器的 DNS 会自动配置为 114.114.114.114 和 8.8.8.8。
配置完,需要重启 docker 才能生效。
查看容器的 DNS 是否生效可以使用以下命令,它会输出容器的 DNS 信息(进入到容器内部,然后查看 etc/resolv.conf 即可):
docker run -it --rm ubuntu cat etc/resolv.conf
5.2 配置容器 DNS
如果只想在指定的容器设置 DNS,则可以使用以下命令:
docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu
--rm:容器退出时自动清理容器内部的文件系统。
-h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,
它会被写到容器内的 /etc/hostname 和 /etc/hosts。
--dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,
让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。
--dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,
在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
如果在容器启动时没有指定 --dns 和 --dns-search,Docker 会默认用宿主主机上的 /etc/resolv.conf 来配置容器的 DNS。
0. 示例
0.1 启动redis,并设置密码
docker run -d --name redis1 -p 6379:6379 redis --requirepass "gs123456"
参数解释:
-d : 后台运行
-name 为容器的名字
-p 端口映射
--requirepass:redis密码
redis为镜像名
0.2 启动 mysql,设置密码
sudo docker run --name mysql -v /home/mydocker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=test --network myDocker -p 3306:3306 -d --restart always myharbor.reposiry.com/test/mysql:latest
-v:数据卷挂载,容器启动之后,会将容器内的数据,保存在服务器的/home/ecidi/mysql/data目录下
-e: 设置容器内参数
--network:指定 network
--restart always:启动 docker 后,自动运行该容器
网友评论