docker常用命令
一、配置镜像加速网站
一般镜像网站都是国外拉取很慢,所以自定配置国内镜像网站,像我这里使用自己阿里云账号提供的镜像地址
以下配置方法配置镜像加速器,是针对Docker客户端版本大于 1.10.0 的用户,如果低于这个版本,镜像加速配置方法可以百度找到就比较复杂一点
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
[root@master ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://t5utj2u4.mirror.aliyuncs.com"]
}
[root@master ~]#
此处使用自己阿里云账号页面提供的镜像地址即可。
重启docker
systemctl daemon-reload
systemctl restart docker
检查是否生效
docker info
Registry Mirrors:
https://t5utj2u4.mirror.aliyuncs.com/
二、基本常用命令
查看本机镜像
[root@localhost ~]#docker images
搜索centos相关镜像
[root@localhost ~]#docker search centos
拉取镜像
[root@localhost ~]#docker pull centos
docker中拉取指定版本的镜像
比如:
docker pull centos:7
docker pull mongo:3.6.6
dockre pull redis:4.0
简单测试使用镜像
docker: Docker 的二进制执行文件。
run:与前面的 docker 组合来运行一个容器。
centos指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 下载公共镜像。
/bin/echo “Hello world”: 在启动的容器里执行的命令
[root@localhost ~]# docker run centos /bin/echo "hello-world"
hello-world
删除镜像
[root@localhost ~]#docker rmi 镜像ID
进入容器
-t 在新容器内指定一个伪终端或终端。
-i 允许你对容器内的标准输入 (STDIN) 进行交互
[root@localhost ~]# docker run -it centos /bin/bash
[root@678b1725d9e3 /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@678b1725d9e3 /]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@678b1725d9e3 /]#
使用exit或ctrl+d退出容器
[root@678b1725d9e3 /]# exit
exit
[root@localhost ~]#
exec 命令 ID 或者 name
docker exec -it mynginx /bin/bash
后台模式
-d 在后台运行容器并打印容器ID
[root@localhost ~]# docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"
f66c5f63b4f5a6ca4d37575682e181fe8697c51db89d49ff0e59060c18a00b70
在输出中,我们没有看到期望的"hello world",而是一串长字符
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这个长字符串叫做容器ID,对每个容器来说都是唯一的,我们可以通过容器ID来查看对应的容器发生了什么。
首先,我们需要确认容器有在运行,可以通过 docker ps 来查看容器ID
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f66c5f63b4f5 centos "/bin/sh -c 'while t…" 4 minutes ago Up 4 minutes laughing_keldysh
CONTAINER ID:容器ID
NAMES:自动分配的容器名称
在容器内使用docker logs命令,查看容器内的标准输出
[root@localhost ~]#docker logs f66c5f63b4f5
停止容器
[root@localhost ~]#docker stop f66c5f63b4f5
f66c5f63b4f5
删除容器或镜像
[root@localhost ~]# docker rm 容器ID
强制删除运行的容器
[root@localhost ~]# docker rm -f 容器ID
杀死所有正在运行的容器
docker kill $(docker ps -a -q)
删除所有已经停止的容器
docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像
docker rmi $(docker images -q -f dangling=true)
删除所有镜像
docker rmi $(docker images -q)
docker rm 可以删除容器 ;但是删除之前必须是 stop 状态;
查看容器
docker ps :列出当前所有正在运行的container
docker ps -l :列出最近一次启动的container
docker ps -a :列出所有的container(包含历史,即运行过的container)
docker ps -q :列出最近一次运行的container ID
获取所有容器ID
docker ps -a | awk '{ print $1}' | tail -n +2
Docker 端口映射
# docker run -d P sevrer
# docker run -d p port:port server
-d 后台运行;
-P -p 标识来指定容器端口绑定到主机端口。
两种方式的区别是:
-P : 是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。
默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp
使用IP:HostPort:ContainerPort格式指定映射使用一个特定的地址
docker port ID/name 查看端口绑定
docker port website
docker run -d -p 4594:22 --name myos --privileged=true centos:latest /usr/sbin/init
启动容器报错问题
结束容器进程,清除网络映射。重启网卡 再起docker 启容器。
关闭进程
pkill docker
清除 nat 规则
iptables -t nat -F
关闭网卡
ifconfig docker0 down
删除 虚拟网桥
brctl delbr docker0
最后重启docker后解决
查看WEB 应用程序日志
docker logs [ID或者name] 可以查看容器内部的标准输出。
docker logs name
docker logs -f name 实时查看日志
查看容器进程
docker top webstie
查看Docker 的底层信息
docker inspect ;
docker inspect website
使用 docker inspect 来查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
更改运行容器的名称
docker ps 查看运行的容器;
docker rename myweb youweb
启动docker容器并在退出时自动删除
docker run -it --rm nginx /bin/bash
以上命令就是以命令行方式启动docker容器,并在退出时自动删除,使用bash作为当前shell
启动运行 nginx 容器示例
docker run -d nginx 后台运行 ;
docker exec :在运行的容器中执行命令
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
docker exec -it mynginx /bin/sh
docker commit 编辑镜像
从容器创建一个新的镜像;
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "name" -m "my-tomcat" website my-tomcat:v2
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停;
容器上传下载 拷贝文件cp
上传测试文件:
docker cp start-kube.sh website:/root/
下载文件 docker cp
docker cp website:/test.html /root/
进入容器:
docker exec -it website /bin/bash
diff 查看容器的目录结构
docker diff ID/NAME
# docker diff webstie
配置一个centos系统并设置密码
docker pull centos
docker tag centos:latest centos:v1
docker run -d -p 4594:22 --name myos --privileged=true centos:v1 /usr/sbin/init
docker exec -it myos /bin/bash
ss -ntl
yum install openssh-server
systemctl restart sshd
ss -ntl
yum install passwd
passwd
yum install initscripts net-tools
Docker容器里的centos、unbuntu无法使用 systemctl 命令的解决方案
例如:centos
docker run -d -it -p 4590:22 --privileged=true --name myos myos:v1
docker exec -it myos /bin/bash
注意:--privilaged=true一定要加上的。
docker容器设置自动启动
启动时加--restart=always
docker run -tid --name myos -p 8081:8080 --restart=always -v /os/v1/log:/usr/local/tomcat/logs myos
Flag Description
no 不自动重启容器. (默认value)
on-failure 容器发生error而退出(容器退出状态不为0)重启容器
unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
如果已经启动的项目,则使用update更新:
docker update --restart=always myos
设置容器主机名和DNS
h HOSTNAME 或者 --hostname=HOSTNAME
--dns=IP_ADDRESS 使用指定的DNS服务器
使用-v选项共享物理机文件数据
-v /etc/hosts:/etc/hosts
当然此法适用于容器hosts与宿主机hosts内容一致的情况