其实DockerHub上已经有了这个镜像,名字叫“hello-world”。直接从DockerHub拉取镜像,命令和Git有些相似:docker pull hello-world
[root@localhost docker]# docker pull hello-world Using default tag: latest Trying to pull repository docker.io/library/hello-world ... latest: Pulling from docker.io/library/hello-world 1b930d010525: Pull complete Digest: sha256:41a65640635299bab090f783209c1e3a3f11934cf7756b09cb2f1e02147c6ed8 Status: Downloaded newer image for docker.io/hello-world:latest 查看镜像查看拉取到的Docker镜像:docker images
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/hello-world latest fce289e99eb9 5 months ago 1.84 kB 运行镜像运行镜像:docker run hello-world。看到打印出如下的内容,代表运行成功。
[root@localhost docker]# docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ Docker常用命令docker images : 列出本地的镜像
docker pull image_name:拉取镜像。如果没有指定具体的镜像标签,会自动拉取latest标签的镜像。
docker search image_name:在Docker Hub上查找镜像
docker start container:启动和运行容器
docker run [OPTIONS] image_name:基于镜像创建并启动一个容器
常用选项:
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
docker logs container:获取容器的日志信息
docker attach container:进入容器
exit:退出容器
docker exec container command:在运行的容器中执行命令
docker stop container:停止容器
docker rm container:删除容器
docker save -o image_name.tar image_name:导出镜像
docker ps:查看正在运行的容器
docker ps -a:查看系统中容器列表
docker top container:查看容器内的进程
docker stop daemon_dave:停止守护容器
Docker构建镜像 如何构建镜像?构建一个自己的镜像需要两步:
编写Dockerfile。Dockerfile 告诉Docker如何制作镜像以及每一步是怎样的。
Docker执行Dockerfile中的指令的流程是这样的:
Docker从基础镜像运行一个容器
执行一条指令,对容器进行修改
提交到一个新的镜像层
Docker再基于刚才提交的镜像运行一个新容器
执行Dockerfile中的下一条指令,知道所有指令执行完毕。
使用docker build命令构建。
编写Dockerfile每个Dockerfile的第一条命令必须是FROM。FROM指令指定一个已经存在的镜像,告诉Docker后续的指令都是在这个基础上进行的。例如:FROM java:8
MAINTAINER 指令用来标志该镜像所有者和联系方式。例如:MAINTAINER James "×××@example.com"
VOLUME 指令用来向基于镜像创建的容器添加卷。一个卷可以是存在一个或者多个容器内的特定的目录,这个目录可以绕过联合文件系统,并提供共享数据和数据持久化的功能。
CMD 指令用来指定一个容器启动时要运行的命令。
ENTRYPOINT指令与CMD指令很相似。
WORKDIR 指令用来从镜像创建一个新容器的时候,在容器内部设置一个工作命令,ENTRYPOINT或CMD指令指定的程序会在这个目录下执行。
ENV 指令用来在在镜像构建过程中设置环境变量。例如:ENV TEST_PATH /home/test
RUN 指令用来在当前镜像中运行指定的命令。例如:RUN apt-get install -y nginx
EXPOSE 指令用来告诉Docker该容器内的应用程序将使用容器的指定端口。例如:EXPOSE 80
ADD 指令用来将构建环境下的文件和目录复制到镜像中。 例如:ADD docker-0.0.1-SNAPSHOT.jar app.jar
COPY 指令与ADD 类似,不同点在与COPY只关心在构建上下文中复制本地文件,而不会提取和解压。
LABEL 指令用于为Docker镜像添加元数据。例如:LABEL name=test description="a container is used to test"