1、Hello World
首先
$ docker run ubuntu echo hello world
2、简单命令
$ docker images # 显示本地存在的镜像 $ docker ps # 显示正在运行的容器 $ docker ps -a # 显示所有的容器
3、 运行ng镜像
使用docker运行nginx
$ docker run -p 8080:80 -d nginx # -p 端口映射:将本地的8080端口映射到docker的80端口上 # -d 以守护进程方式执行,命令会直接返回,进程会在后台一直运行
将文件拷贝到容器中的目录
$ docker cp index.html 12add7bbc58c://usr/share/nginx/html # cp 将本地文件拷贝到容器中。 # index.html 本地的文件 # 12add7bbc58c 容器的id # /usr/share/nginx/html 容器中的路径地址
停止一个容器
$ docker stop 12add7bbc58c # 12add7bbc58c 容器的ID
此时如果再次使用容器执行nginx,发现替换的index.html已经不在了,首页恢复了默认状态。这是因为容器做的所有更改都是暂时的,不会进行保存操作。
保存更改
$ docker commit -m 'fun' e7c34d924c31 # 将操作保存起来,这时候会产生一个新的镜像 # 此时产生的镜像 名称 和 tag 都是<none> $ docker commit -m 'fun' e7c34d924c31 nginx-fun # 此时产生的镜像,名字为 nginx-fun
删除Image和容器
$ docker rmi 84ca813a0995 # 删除image, 84ca813a0995为ImageID $ docker rm e7c34d924c31 17add78bbc58c # 删除容器 e7c34d924c31 17add78bbc58c均为容器id
4、第一个Dockerfile
之前的方法是通过docker commit
命令创建了一个新的镜像。
现在有一个更加合理的方式来创建镜像。
一个最简单的Dockerfile文件内容
FROM alpine:latest # 基础镜像,alpine是一个专门针对docker的极简Linux系统 MAINTAINER wangXiaop # 告诉别人这是你的文件 CMD echo 'Hello World' # 命令
使用命令创建:
$ mkdir docker_dir $ touch Dockerfile # 创建Dockerfile文件 $ vim Dockerfile# 编辑这个文件 $ docker build -t hello_docker . # 将上面的Dockerfile文件内容写入文件。-t hello_docker 指定一个名称。. 是指当前路径,会将路径下的所有文件送给docker build命令执行
5、 第二个Dockerfile
这是一个稍微复杂的Dockerfile
FROM ubuntu # 基础镜像 MAINTAINER wXiaop # 作者 RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list # 更换国内镜像,不是必须 RUN apt-get update # 更新程序的库 RUN apt-get install -y nginx # 安装nginx COPY index.html /var/www/html # 拷贝文件到容器中 ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"] # 程序入口点,最后将三个数组用空格隔开来执行 EXPOSE 80 # 暴露一个端口
命令 用途 FROM base_image RUN 执行命令 ADD 添加文件 COPY 拷贝文件 CMD 执行命令 EXPOSE 暴露端口 WORKDIR 制定路径 MAINTAINER 维护者 ENV 设定环境变量 ENTRYPOINT 容器入口 USER 制定用户 VOLUME mount point
6、 镜像分层
Dockerfile中的每一行都产生一个新层,已经存在IMG里面的层,都是只读的。
FROM alpine:latest # 每层的id:4E38E38CE0
MAINTAINER wangXiaop # FB1AABF4427B
CMD echo 'Hello World' # 3DF065VGDFF6
会产生一个container layer
层,这一层是可读可写的。
7、 存储技术:Volume
提供独立于容器之外的持久化存储
简单例子:
$ docker run -v /usr/share/nginx/html nginx
这个命令将宿主机里面的
/var/lib/docker/volumes/bae2223s3fd...3sdf3/_data
路径,挂载在容器里面的/usr/share/nginx/html
第二个命令:
$ docker run -v $PWD/html:/var/www/html nginx # $PWD 是shell语法,始终指向当前目录。 # 这个命令将,当前目录下的html目录 映射到容器里面的/var/www/html
第三种方式
创建一个仅有数据的容器。
$ docker create -v $PWD/data:/var/mydata --name data_container ubuntu # 创建一个容器,以Ubuntu为基础镜像。 # 并且关联当前目录的data文件夹 到 容器的 /var/mydata 目录 $ docker run --volumes-from data_container ubuntu # 使用--volume-from 将数据容器作为参数传进去。 # 再指定一个基础镜像 Ubuntu # 这个数据容器 data_container可以被多个容器同时挂载
8、 镜像仓库
English | 中文 |
---|---|
host | 宿主机 |
image | 镜像 |
container | 容器 |
registry | 仓库 |
daemon | 守护程序 |
client | 客户端 |
9、 Docker常用命令总结
$ sudo docker pull 仓库/镜像:版本(不写默认latest) $ sudo docker run 加一堆参数,用来创建容器 $ sudo docker ps #查看运行容器 $ sudo docker images #查看所有下载的镜像 $ sudo docker exec -i -t ha /bin/bash #进入容器终端 $ sudo docker logs -f -t --tail 10 ha #实时查看10行的ha日志
网友评论