目录
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 (<仓库名>:<标签>)就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
Linux安装Docker
查看系统版本信息
lsb_release -a
安装Docker
yum -y install docker
-y表示不询问安装,直到安装成功,安装完后查看安装列表
yum list installed | grep docker
启动docker
systemctl start docker
查看docker服务状态
systemctl status docker
设置开机启动
systemctl enable docker.service
Docker常用命令
项目开发常用命令汇总:
制作镜像
docker build -t test/test-registry .创建并启动容器
docker run --name test-registry -d -p 1001:1001 test/test-registry
查看容器日志
docker logs 参数 容器id
- -f follow 表示实时显示日志
- -t timestamp 表示显示时间戳
- --tail=n 或 --tail n 表示显示末尾n行
例如:
docker logs -f --tail 200 ContainerId,表示实时加载日志信息,并且仅显示最后200行。查看容器IP地址
docker inspect 容器ID
进入容器
docker exec -it 775c7c9ee1e1 /bin/bash
Docker日期同步
在Dockerfile添加:
# 添加时区环境变量,亚洲,上海 ENV TimeZone=Asia/Shanghai # 使用软连接,并且将时区配置覆盖/etc/timezone RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
Docker导出和导入
# 导出镜像
docker save -o nginx.tar nginx:1.14
# 导入镜像,nginx.tar就是刚才导出的包
docker load -i nginx.tar
- nginx.tar是导出tar包的文件名,
- nginx:1.14是仓库中的镜像名称,这里也可以直接使用镜像ID
容器
获取镜像 docker pull ubuntu 启动容器 docker run -it ubuntu /bin/bash 参数说明: -i: 交互式操作。 -t: 终端。 ubuntu: ubuntu 镜像。 /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。 要退出终端,直接输入 exit 查看所有的容器 docker ps -a 停止重启一个容器 docker stop <容器 ID> docker restart <容器 ID> 强制删除容器(-f) docker rm -f <容器 ID>
镜像
列出镜像列表
docker images列出镜像:使用关键字过滤(部署十分有用)
docker images|grep misc
查找镜像、拖取镜像、删除镜像
docker search httpd
docker pull httpd
docker rmi hello-world构建镜像
使用命令docker build,从零开始来创建一个新的镜像。为此,我们需要创建一个Dockerfile文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。FROM centos:6.7 MAINTAINER Fisher "[email protected]" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D
指令说明:
- 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
- FROM:指定使用哪个镜像源
- RUN:指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
设置镜像标签
docker tag <镜像ID> 镜像源名:标签名
docker tag 860c279d2fec runoob/centos:dev
Docker run 命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name="nginx-lb": 为容器指定一个名称;
- --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
- --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
- -h "mars": 指定容器的hostname;
- -e username="ritchie": 设置环境变量;
- --env-file=[]: 从指定文件读入环境变量;
- --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
- -m :设置容器使用内存最大值;
- --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- --link=[]: 添加链接到另一个容器;
- --expose=[]: 开放一个端口或一组端口;
- --volume , -v: 绑定一个卷
实例
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
Docker 安装mysql
1. docker pull mysql:latest
2. docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
参数说明:
- -p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
- MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
- --name 指定容器名称
- mysql ImageId
3. 进入容器,修改root用户允许远程访问
docker exec -it mysql-test bash4. 登录到Docker mysql
mysql -uroot -p5. 修改远程权限
> use mysql; > select host,user from user; > alter user 'root'@'%' identified with mysql_native_password by '123456xx'; > flush privileges;
6. 查看docker日志
docker logs -f --tail 10 a4dac74d48f7
- 10 表示查看10行
- a4dac74d48f7 容器ID
配置Docker国内镜像
1. vi /etc/docker/daemon.json
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
2. 重启Docker
systemctl daemon-reload
systemctl restart docker
3. 查看Docker配置是否生效
docker info