随便写的,按照我觉得最需要理解和使用的频率来决定的
三个基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
不给出更多的细节解释,因为我也说不清
容器和镜像的关系就像,类和实例。
镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
最常使用的 Registry 公开服务是官方的 Docker Hub, 这也是默认的 Registry, 并拥有大量的高质量的官方镜像。除此以外,还有 CoreOS 的 Quay.io, CoreOS 相关的镜像存储在这里; Google 的 Google Container Registry, Kubernetes 的镜像使用的就是这个服务。
由于某些原因,在国内访问这些服务可能会比较慢。国内的一些云服务商提供了针对 Docker Hub 的镜像服务( Registry Mirror ), 这些镜像服务被称为加速器。常见的有阿里云加速器、DaoCloud 加速器等。
除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了Docker Registry 镜像,可以直接使用做为私有 Registry 服务。
docker常用命令
获取镜像
docker pull --help
----------------------------------------------------------------------------
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
----------------------------------------------------------------------------
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
----------------------------------------------------------------------------
例子
docker pull hub.c.163.com/library/tomcat:latest
docker pull centos:latest
docker pull -a java
----------------------------------------------------------------------------
构建镜像
#以当前文件夹的dockerfile来构建名字为name,标签为tag的镜像,-t表示
docker build -t name:tag .
# 使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像。
$ docker build github.com/creack/docker-firefox
# 也可以通过 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
运行镜像
docker run --help
----------------------------------------------------------------------------
太多了,列取常用的吧
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;-it这样
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
--rm: 这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容
器并不会立即删除,除非手动 docker rm;
--name="xxxx": 为容器指定一个名称;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
----------------------------------------------------------------------------
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
----------------------------------------------------------------------------
例子
# 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
# 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data
docker run -p 80:80 -v /zhuji/data:/data -d nginx:latest
# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
docker run -it nginx:latest /bin/bash
# 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令,退出后删除
docker run --rm -i -t centos:forsql /bin/bash //运行镜像
#进入已经允许的容器
sudo docker exec -it 775c7c9ee1e1 /bin/bash
列出镜像
docker image ls
列表包含了 仓库名 、 标签 、 镜像 ID 、 创建时间 以及 所占用的空间
构建dockerfile
# 常用命令说明
FROM # 来自哪个镜像基础构建的
RUN # RUN每加一层,就会大一层,所以如果可以,按照 && 拼接,而不是一个命令一个RUN
shell 格式: RUN <命令> , 就像直接在命令行中输入的命令一样
eg: RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
exec 格式: RUN ["可执行文件", "参数1", "参数2"]
eg: RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
FROM centos:7
LABEL "CapybaraJ" <capybara@aaa.com>
RUN yum install -y httpd
RUN yum install -y mariadb-server mariadb
EXPOSE 3306
RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm \
&& rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
RUN yum install -y php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64
COPY run.sh /root/
RUN chmod 755 /root/run.sh
ADD onethink.tar.gz /var/www/html/
COPY onethink.sql /root/onethink.sql
ADD phpmywind.tar.gz /var/www/html/
COPY phpmywind_db.sql /root/phpmywind_db.sql
#RUN mv /var/www/html/OneThink_v1.0.131129 /var/www/html/onethink
ENTRYPOINT "/root/run.sh"
容器和主机文件交互
$docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
#举例子
docker cp RS-MapReduce 30026605dcfe:/home/cloudera
docker cp 30026605dcfe:/home/cloudera/RS-MapReduce /tmp/
镜像与容器管理
# 显示container
docker ps
#删除container id
docker rm 3ca00
# 删除所有container
docker rm `docker ps -a -q`
# 删除镜像 id
docker rmi 10d1
#删除所有images
docker rmi `docker images -q`
#删除所有none的镜像
docker rmi $(docker images --filter dangling=true -q)
# 同理可用
docker system prune
# 毁灭性的删除
docker system prune -a
# 类似于Linux上的df命令,用于查看Docker的磁盘使用情况
docker system df