mac 下docker使用
1.参考链接
- http://www.runoob.com/docker/docker-architecture.html
- https://www.jianshu.com/p/cf6e7248b6c7
- https://www.v2ex.com/t/441481
2.Docker 架构
- 采用了客户端-服务器(C/S)架构模式,通过远程API来管理和创建Docker容器
- Docker容器通过Docker镜像来创建
- 容器和镜像的关系类似于面向对象变成中的对象与类
- Docker镜像是用于创建Docker容器的模板
- Docker容器是独立运行的一个或一组应用
- Docker客户端通过命令行或者其他工具使用DockerAPI与Docker的守护进程通信
- Docker主机是一个物理或者虚拟的机器用于执行Docker守护进程和容器
- Docker仓库适用于保存镜像
- Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。
- Docker Machine 是一个简化Docker安装的命令行工具,通过一个简单的命令行即可以在相应的平台安装Docker,比如Virtual Box、Digital Ocean、Mirosoft Azure。
3.安装
3.1Mac OS
3.1.1下载docker地址
https://dn-dao-github-mirror.qbox.me/docker/install/mac/Docker.dmg
3.2 linux
4.使用docker创建容器
4.1 创建nginx容器
4.1.1安装nginx镜像,并且启动
docker安装nginx有两种方式:docker pull nginx(推荐) 和通过DockerFile(不推荐)
# 查找nginx镜像
docker search nginx
# 拉取nginx官方的镜像
docker pull nginx
# 启动docker中的nginx
docker run --name webserver -d -p 80:80 nginx
启动docker中的nginx的参数说明:
-
-p 80:80:将容器的80端口映射到主机的80端口
-
--name mynginx:将容器命名为mynginx
-
-v $PWD/www:/www:将主机中当前目录下的www挂载到容器的/www
-
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
-
-v $PWD/logs:/wwwlogs:将主机中当前目录下的logs挂载到容器的/wwwlogs
4.1.2测试验证
4.1.3.与容器通过bash交互
docker exec -it webserver bash
修改nginx配置文件
echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
刷新链接,并且测试验证
http://localhost
远程登录docker中的mysql
查看在运行的容器
命令
docker ps
返回效果
image.png进入mysql服务中进行设置
命令
docker exec -it bcf6309de533 bash
返回效果
image.png命令解析
参考地址:http://www.runoob.com/docker/docker-exec-command.html
docker exec :在运行的容器中执行命令
语法
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS说明:
- -d :分离模式: 在后台运行
- -i :即使没有附加也保持STDIN 打开
- -t :分配一个伪终端
5.常用命令行
5.1列出容器
docker ps:列出容器
5.1.1OPTIONS说明:
- -a :显示所有的容器,包括未运行的。
- -f :根据条件过滤显示的内容。
- --format :指定返回值的模板文件。
- -l :显示最近创建的容器。
- -n :列出最近创建的n个容器。
- --no-trunc :不截断输出。
- -q :静默模式,只显示容器编号。
- -s :显示总的文件大小。
5.1.2常用示例:
# 列出所有正在运行的容器信息
docker ps
# 列出最近创建的5个容器
docker ps -n 5
# 列出所有容器的容器编号
docker ps -a -q
5.2删除容器
docker rm :删除一个或多少容器
5.2.1OPTIONS说明:
- -f :通过SIGKILL信号强制删除一个运行中的容器
- -l :移除容器间的网络连接,而非容器本身
- -v :-v 删除与容器关联的卷
5.2.2常用示例
# 强行删除容器 db01和db02
docker rm -f db01 db02
#
docker rm -l db
#
docker rm -v nginx01
5.3运行容器
docker run:运行容器
5.3.1OPTIONS说明:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-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=[]: 开放一个端口或一组端口;
5.3.2常用示例
# 使用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
5.4 启动/停止/重新启动容器
docker start:启动一个或多个已经被停止的容器
docker stop:停止一个正在运行中的容器
docker restart:重启容器
5.4.1常用实例
# 启动
docker start 容器id
# 停止
docker strop 容器id
# 重启
docker restart 容器id
PS:
docker run 与docker start的区别:
docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
docker kill 和 dockerstop 有什么区别:
有区别的,kill是不管容器同不同意,我直接执行kill -9,强行终止;stop的话,首先给容器发送一个TERM信号,让容器做一些退出前必须的保护性、安全性操作,然后让容器自动停止运行,如果在一段时间内,容器还是没有停止,再进行kill -9,强行终止。