docker 的一些基础概念
docker command
systemctl start docker
systemctl restart docker
systemctl enable docker
配置加速镜像
添加配置
vi /etc/docker/daemmon.json
{
"registry-mirrors":[
"http://hub-mirror.c.163.com"
]
}
加载配置
systemctl daemon-reload
重启docker
systemctl restart docker
docker ps -a 查看所有容器进程
docker rm xxxxxxxx 移除容器xxxxxxxx
docker rmi hello-world 移除hello-world镜像
docker 镜像相关的命令 docker pull --help
从docker 仓库获取镜像 docker pull [选项]
docker image ls 列出所有下载过的镜像(docker images)
[root@pikzas docker]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 065cf14a189c 4 weeks ago 135MB
hello-world latest d1165f221234 4 months ago 13.3kB
ubuntu
[root@pikzas docker]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 1 262.3MB 262.3MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
查看镜像 容器 数据卷所占用空间
doceker system df
[root@pikzas docker]# docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 1 262.3MB 262.3MB (99%)
Containers 1 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
仓库名 和标签都为none的镜像为虚悬镜像
docker image ls -f dangling=true
[root@pikzas pikzas]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 16.04 065cf14a189c 4 weeks ago 135MB
hello-world latest d1165f221234 4 months ago 13.3kB
ubuntu
虚悬镜像是可以直接删除的
可以用命令 docker image prune来删除掉所有的虚悬镜像
删除本地镜像
docker rmi [选项] <镜像1> <镜像2>
<镜像> 可以是短ID 长ID 镜像名 或者是镜像摘要
镜像查询用 docker image ls -q
[root@pikzas pikzas]# docker image ls -q hello-world
d1165f221234
于是批量删除可以结合以上两个命令
docker image rm $(docker image ls -q xxx -f before=xxx:1.0) 删除所有xxx:1.0之前的所有镜像
docker 容器的操作
新建并启动 或者启动停止的机器
docker run
docker start
[root@pikzas ~]# docker run -it ubuntu:16.04 bash
root@4e2a8f71de37:/#
通过添加-d 参数来开启后台运行
[root@pikzas ~]# docker run -d hello-world
c11e78317c1f34b13d1c441a6998980ddce3be23b2b090ed3968ea4fefb5696f
docker logs
[root@pikzas ~]# docker logs c11e78317c1f34b13d1c441a6998980ddce3be23b2b090ed3968ea4fefb5696f
Hello from Docker!
This message shows that your installation appears to be working correctly.
docker container stop
docker container ls -a 列出所有停止运行的容器
docker container start
docker container restart
docker exec
[root@pikzas ~]# docker exec -it 95d86d0cd867 bash
root@95d86d0cd867:/# ll
total 20
drwxr-xr-x 21 root root 4096 Jul 19 01:30 ./
drwxr-xr-x 21 root root 4096 Jul 19 01:30 ../
-rwxr-xr-x 1 root root 0 Jul 19 01:30 .dockerenv*
drwxr-xr-x 2 root root 4096 Jun 11 23:09 bin/
drwxr-xr-x 2 root root 6 Apr 12 2016 boot/
drwxr-xr-x 5 root root 360 Jul 19 01:32 dev/
docker export
docker import 导入快照为本地镜像
cat x.zip | docker import - 镜像用户/镜像名称:镜像版本
同样可以通过url 或者目录来导入
docker import http://study.163.com/image.tgz example/imagerepo
删除容器(只有终止状态的容易可以被删除,运行状态的不可删除)
docker container rm ubuntu:16.04
强行要删除运行状态的容器 需要添加-f 强制停止容器
删除所有停止状态的容器
docker container prune
[root@pikzas ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e2a8f71de37 ubuntu:16.04 "bash" 2 hours ago Exited (127) About an hour ago focused_pasteur
971fde08741d hello-world "/hello" 12 hours ago Exited (0) 12 hours ago nostalgic_brahmagupta
[root@pikzas ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
^[[ADeleted Containers:
4e2a8f71de372dcdc8cde4c86eca83c673228b8fe9bd0b07c34e5a32d4cc0b1b
971fde08741dff0af5760d73f127eb8ad4c7fb9a97aac1220f45e22425d54c1c
Total reclaimed space: 28B
[root@pikzas ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@pikzas ~]#
dockfile 定制镜像
- 就是指定容器每一层需要的配置 然后以配置文件的形式指定具体的细节
FROM 命令
RUN 命令
COPY 命令
ADD 命令
CMD 命令
ENV 命令 设置环境变量
ARG 命令
VOLUMN 命令 VOLUMN <路径> docker 不推荐直接在容器内部写文件数据
EXPOSE <端口> 声明映射的端口
WORKDIR <工作路径> 指定当前工作的路径
ONBUILD
docker save
docker hub 搭建私有仓库
docker-registry
curl 127.0.0.1:5000/v2/_catalog查看本地安装的docker 内有哪些镜像
Dockerfile 默认就是该文件为配置
docker build -t myimage:1.0 .
构建当前目录下的Dockerfile 为一个新的镜像并命名为myimage版本为1.0
DOCKER 创建数据卷
docker三种写入数据的方式
数据卷 挂载主机目录 内存
创建数据卷
docker volumn create my-volumn
docker volumn ls
docker volumn inspect my-volumn
docker run 使用--mount
docker run --name session-web -d -p 8888:8080 --mount type=bind,source=/src/webapp,target=/opt/webapp session-web:latest
删除数据卷
docker volumn rm test
一般情况下删除容器不会删除这些容器所使用的数据卷
但是还是可以通过docker rm -v 再删除容器的同时候 一起删除掉所使用的数据卷
docker volume prune 可以删除无容器引用的数据卷
docker compose的使用
docker 的监控工具
类似于ELK 可以用CAdvisor + InfluxDB + Grafana
Grafana UI展示界面
InfluxDB 开源的时序化存储的DB 用来存储docker 运行的监控数据
CAdvisor 收集容器运行时的数据
部署InfluxDB 服务
docker run -d --name influxdb -p 8086:8086 -v /data/influxdb:/var/lib/influxdb --hostname=influxdb influxdb
访问管理的客户端
http://ip:8083
docker exec -it influxdb influx
CREATE DATABASE "test"
CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES
部署CAdvisor 服务
部署Granfana 服务
docker run -d -p 3000:3000 -v /data/grafana:/var/lib/grafana --link=influxdb:influxdb --name grafana grafana/grafana