docker
Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。沙盒机制/沙箱机制。
镜像(Image):容器模板。Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。(类比java中 class)
容器(Container):镜像运行实体。镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。(类比java中 class new 出来的实例对象)
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
1. docker 基础命令
启动docker
1 | systemctl start docker |
重启docker
1 | systemctl restart docker |
停止docker
1 | systemctl stop docker |
docker设置随服务启动而自启动
1 | systemctl enable docker |
docker开机自启动
1 | chkconfig docker on |
2. docker 镜像操作
查找镜像
1 | docker search <IMAGE_ID/NAME> |
下载镜像
1 | docker pull <IMAGE_ID> |
上传镜像
1 | docker push <IMAGE_ID> |
查看镜像列表
1 | docker images |
删除镜像
1 | docker rmi <IMAGE_ID> |
构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
1 | runoob@runoob:~$ cat Dockerfile |
3. docker 容器操作
停止容器
1 | docker stop <CONTAINER_ID> |
启动容器
1 | docker start <CONTAINER_ID> |
重启容器
1 | docker restart <CONTAINER_ID> |
删除容器
1 | docker rm <CONTAINER_ID> |
查看容器信息
1 | docker inspect <CONTAINER_ID> |
进入容器
1 | docker exec -it <CONTAINER_ID> /bin/bash |
容器自启动
1 | docker update --restart=always <CONTAINER_NAME> |
列出所有在运行的容器信息
1 | docker ps |
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。状态有7种:
- created(已创建)
- restarting(重启中)
- running 或 Up(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
查看容器日志
1 | docker logs --tail="100" <CONTAINER_NAME> |
容器和本地文件系统之间拷贝文件/文件夹
1 | docker cp 本地文件的路径 <CONTAINER_ID>:容器路径 |
查看容器启动时命令
1 | docker inspect --format "$(curl -s https://gist.githubusercontent.com/efrecon |
4. 常用容器启动命令
Nginx
1 | docker run --name nginx -p 80:80 -p 443:443 -v /opt/nginx/html:/usr/share/nginx/html -v /opt/nginx/conf.d/:/etc/nginx/conf.d/ -v /opt/nginx/logs:/var/log/nginx -d --restart=always nginx |
Redis
1 | docker run -p 6379:6379 --name redis -v /opt/redis/redis.conf:/etc/redis/redis.conf -v /opt/redis/data:/data redis-server /etc/redis/redis.conf -d --restart=always redis |
Mysql
1 | docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v /opt/mysql/data:/var/lib/mysql -v /opt/mysql/conf:/etc/mysql/conf.d --name mysql -d --restart=always mysql |
Nacos
1 | docker run -d --name nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODE=standalone -v /opt/nacos/logs/:/home/nacos/logs -v /opt/nacos/conf/:/home/nacos/conf/ --restart=always nacos |
常用
查看所有镜像 docker images
并选择一个镜像
docker ps
查看所有正在运行的容器(start)
docker ps -a
查看所有容器(start/stop)
docker logs -f <container ID>
查看日志,日志文件标准输出
docker start <container ID>
激活一个容器
docker attach <container ID>
激活之后的容器直接进入命令行,但是exit之后就不在后台继续运行了
docker exec <container ID>
从容器退出之后不会停止,而是在后台运行(推荐使用)
docker run -it <container ID> /bin/bash
bash命令行 /bin/sh
“shell脚本”
docker stop <container ID>
停止一个ID