Docker-----常用命令
安装docker
1、安装docker
yum install docker
查一下安装版本
docker --version
2、启动docker
selinux需要关闭
systemctl enable docker.service
systemctl start docker.service
添加国内镜像库
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
需要重启docker生效
列出容器上的镜像
docker images
其中我们可以根据REPOSITORY来判断这个镜像是来自哪个服务器
如果没有 / 则表示官方镜像,类似于username/repos_name表示Github的个人公共库,类似于regsistory.example.com:5000/repos_name则表示的是私服。
IMAGE ID列其实是缩写,要显示完整则带上--no-trunc选项
搜索镜像
docker search nginx
搜索的范围是官方镜像和所有个人公共镜像。NAME列的 / 后面是仓库的名字。
下载镜像
docker pull nginx
删除镜像
docker rmi image-id
需要先删除应用这个镜像的docker
生成容器
交互式
docker -ti run --restart=always --name nginx1 -d -p 6378:80 -v /tmp/nginx:/tmp/:ro nginx
--name 运行一个名字为nginx1的容器 nginx 使用nginx镜像 -p 将Docker中的nginx的80端口映射到本机的6378端口。 -d 后台执行 --restart=always 自动重启容器 -t:进入终端 -i:获得一个交互式的连接,通过获取container的输入
-v 将主机上的目录挂载到容器的目录
#不指定的时候默认是rw模式,可以用docker inspect查看容器的属性,可以看到关于挂载目录的详细参数。
1. 默认情况不使用:rw :ro选项,Mode的值就是空字符串,但是rw是true“。
2. 使用:rw选项,Mode的值就是”rw”。
3. 使用:ro选项,Mode的值就是”ro”。
rw:宿主主机和docker互相都可以读写同步,都可以写,都可以互相同步。
ro:这个时候docker内不能写,宿主主机写了可以同步到容器内。
启动/关闭容器
docker stop container-name/container-id
通过容器名称或者容器id启动/停止容器
查看容器状态
docker ps -a #显示所有容器,包括不运行的
docker ps #显示运行中的容器
docker info #查看容器和镜像的数量、以及docker的基本信息等资料
删除容器
docker rm container-name/container-id
只能删除已经不是up状态的docker
进入某个容器
使用container命令,当退出container后,container仍然在后台运行,命令使用方法如下: docker exec -it goofy_almeida /bin/bash 退出容器可以用crtl+D或者exit命令退出 平常的容器一般都可以执行/bin/bash,很是alpine没有,改成 docker exec -it 镜像id sh 就好了。 -u root #进入容器的用户
docker运行日志
journalctl -u docker.service #可以加-f实时查看日志
docker logs 容器名 #查看容器运行日志,也可以加参数-t 带上时间戳
查看容器内进程
docker top 容器名
镜像备份恢复
Docker的镜像和容器可以有两种方式来导出
docker save #ID or #Name docker export #ID or #Name
docker save和docker export的区别:
对于Docker Save方法,会保存该镜像的所有历史记录 对于Docker Export 方法,不会保留历史记录,即没有commit历史 docker save保存的是镜像(image),docker export保存的是容器(container); docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像; docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。
save命令:
docker save [options] images [images...] 示例 docker save -o nginx.tar nginx:latest 或 docker save > nginx.tar nginx:latest 其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
load命令:
docker load [options] 示例 docker load -i nginx.tar 或 docker load < nginx.tar 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
export命令:
docker export [options] container 示例 docker export -o nginx-test.tar nginx-test #导出为tar docker export #ID or #Name > /home/export.tar 其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
import命令:
docker import [options] file|URL|- [REPOSITORY[:TAG]] 示例 docker import nginx-test.tar nginx:imp 或 cat nginx-test.tar | docker import - nginx:imp
文件拷贝
ocker cp :用于容器与主机之间的数据拷贝。
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。 docker cp /www/runoob 96f7f14e99ab:/www/ 将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www。 docker cp /www/runoob 96f7f14e99ab:/www 将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。 docker cp 96f7f14e99ab:/www /tmp/
在容器内运行命令
docker exec -d registry touch /123.txt
docker exec命令可以在容器内部额外的启动新进程,-d后面要加容器名以及要执行的命令
volume使用
docker volume --help Commands: create 创建一个数据卷 inspect 打印一个或多个数据卷的详细信息 ls 列出所有数据卷 prune 删除所有未使用的数据卷 rm 删除一个或多个数据卷
创建一个volume
docker volume create www-data
查看数据卷在宿主机上的路径:
[root@node1 volumes]# docker inspect www-data [ { "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/www-data/_data", "Name": "www-data", "Options": {}, "Scope": "local" } ] [root@nod
注:每创建一个volume,docker会在/var/lib/docker/volumes/下创建一个子目录,默认情况下目录名是一串UUID。如果指定了名称,则目录名是volume名称。volume里的数据都存储在这个子目录的_data目录下。
把卷挂载到容器
docker run --rm --name web -p 80:80 -v www-data:/usr/share/nginx/html:ro -d nginx
privileged参数
--privileged=false
container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。
docker ps 显示指定的列
可以自己指定显示的模板,例如:
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
- table - 表示显示表头列名
- {{.ID}} - 容器ID
- {{.Command}} - 启动执行的命令
可用的占位符
名称 | 含义 |
---|---|
.ID | 容器ID |
.Image | 镜像ID |
.Command | 执行的命令 |
.CreatedAt | 容器创建时间 |
.RunningFor | 运行时长 |
.Ports | 暴露的端口 |
.Status | 容器状态 |
.Names | 容器名称 |
.Label | 分配给容器的所有标签 |
.Mounts | 容器挂载的卷 |
.Networks | 容器所用的网络名称 |