- @[TOC](目录)
- Docker是什么?
- 思维导图
- 一、镜像的基本管理和使用
- (1)查看镜像列表
- (2)获取镜像
- (3)查找镜像
- (4)删除镜像
- 二、容器的基本管理和使用
- (1)运行容器
- (2) *** 作容器
- (3)终止容器
- (4)导入/导出容器
- 三、 构建自定义镜像
- (1)docker commit
- (2)Dockerfile
- 四、网络
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows *** 作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
这篇主要讲述docker在镜像,容器和网络的部分命令
思维导图 一、镜像的基本管理和使用 (1)查看镜像列表
可以使用docker images命令来列出本地主机上的镜像。
[root@master ~]#./image.sh
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 540a289bab6c 7 days ago 126MB
centos latest 0f3e07c0138f 4 weeks ago 220MB
busybox latest 19485c79a9bb 7 weeks ago 1.22MB
registry latest f32a97de94e1 7 months ago 25.8MB
httpd 2.2.32 c51e86ea30d1 2 years ago 171MB
各个选项说明:
REPOSITORY:表示镜像的仓库源。
TAG:镜像的标签。
IMAGE ID:镜像ID。
CREATED:镜像创建时间。
SIZE:镜像大小。
# docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS说明:
-a:拉取所有tagged镜像。
–disable-content-trust:忽略镜像的校验,默认开启。
# docker search [OPTIONS] TERM
例如,需要一个httpd镜像作Web服务时,可以使用docker search命令搜索httpd来寻找适合的镜像。
[root@master ~]# docker search --filter=stars=10 java
NAME DESCRIPTION STARSOFFICIAL AUTOMATED
node Node.js is a JavaScript-based platform for s… 8010 [OK]
tomcat Apache Tomcat is an open source implementati… 2549 [OK]
java Java is a concurrent, class-based, and objec… 1976 [OK]
openjdk OpenJDK is an open-source implementation of … 1947
参数说明:
NAME:镜像仓库源的名称。
DESCRIPTION:镜像的描述。
OFFICIAL:是否是Docker官方发布。
stars:类似GitHub里面的star,表示点赞、喜欢的意思。
AUTOMATED:自动构建。
# docker rmi [OPTIONS] IMAGE [REPOSITORY:TAG]
OPTIONS说明:
-f:强制删除。
–no-prune:不移除该镜像的过程镜像,默认移除。
代码如下(示例):
(1)运行容器运行第一个容器,执行以下命令。
[root@master ~]# docker run -it --rm -d -p 80:80 nginx:latest
参数说明:
-i:交互式 *** 作。
-t:终端。
-rm:容器退出后随之将其删除,可以避免浪费空间。
-p:端口映射。
-d:容器在后台运行。
启动容器
# docker start [CONTAINER ID]
(2) *** 作容器
列出运行中的容器。
# docker ps
# docker container ls
列出所有容器(包含终止状态)。
# docker ps -a
查看具体容器的信息。
# docker inspect [container ID or NAMES]
查看容器的使用资源状况。
# docker stats [container ID or NAMES]
查看容器日志。
# docker logs [OPTIONS] [container ID or NAMES]
OPTIONS说明:
–details:显示更多的信息。
-f,–follow:跟踪实时日志。
–sincestring:显示自某个timestamp之后的日志,或相对时间,如42分钟。
–tailstring:从日志末尾显示多少行日志,默认是all。
-t,–timestamps:显示时间戳。
–until string:显示自某个timestamp之前的日志,或相对时间,如42分钟。
进入容器。
# docker exec -it [CONTAINER ID] bash
进入容器后,输入exit或者按Crtl+C键即可退出容
(3)终止容器删除终止状态的容器。
# docker rm [CONTAINER ID]
删除所有处于终止状态的容器。
# docker container prune
删除未被使用的数据卷。
# docker volume prune
删除运行中的容器。
# docker rm -f [CONTAINER ID]
批量停止所有的容器。
# docker stop $(docker ps -aq)
批量删除所有的容器。
# docker rm $(docker ps -aq)
终止容器进程,容器进入终止状态。
# docker container stop [CONTAINER ID]
(4)导入/导出容器
将容器快照导出为本地文件。
# docker export [CONTAINER ID] > [tar file]
将容器快照导出为本地文件。
# docker export [CONTAINER ID] > [tar file]
三、 构建自定义镜像
(1)docker commit
docker commit命令用于从容器创建一个新的镜像,其语法如下:
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a:提交的镜像作者。
-c:使用Dockerfile指令来创建镜像。
-m:提交时的说明文字。
-p:在commit时,将容器暂停。
Dockerfile是一个文本文档,其中包含了组合映像的命令,可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。
8
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指
向文件系统中任何位置的Dockerfile,其语法如下:
# docker build -f /path/to/a/Dockerfile
Dockerfile一般分为4部分:基础镜像信息、维护者信息、镜像 *** 作指令和容器启动时
执行指令,“#”为Dockerfile中的注释。
Dockerfile主要指令如下:
FROM:指定基础镜像,必须为第一个命令。
MAINTAINER:维护者信息。
RUN:构建镜像时执行的命令。
ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。
CMD:构建容器后调用,也就是在容器启动时才进行调用。
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去“application”,只使用参数。
LABEL:用于为镜像添加元数据。
ENV:设置环境变量。
EXPOSE:指定与外界交互的端口。
VOLUME:用于指定持久化目录。
WORKDIR:工作目录,类似于cd命令。
USER:指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可通过该命令指定运行用户。
ARG:用于指定传递给构建运行时的变量。
ONBUILD:用于设置镜像触发器。
接下来以centos:latest为基础镜像,安装jdk1.8并构建新的镜像centos-jdk。
新建文件夹用于存放JDK安装包和Dockerfile文件。
[root@master ~]# mkdir centos-jdk
[root@master ~]# mv jdk/jdk-8u141-linux-x64.tar.gz ./centos-jdk/
[root@master ~]# cd centos-jdk/
编写Dockerfile。
[root@master centos-jdk]# cat Dockerfile
# CentOS with JDK 8
# Author Guo
# 指定基础镜像
FROM centos
# 指定作者
MAINTAINER Guo
# 新建文件夹用于存放jdk文件
RUN mkdir /usr/local/java
# 将JDK文件复制到镜像内并自动解压
ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/
# 创建软链接
RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
使用docker build命令构建新镜像。
[root@master centos-jdk]# docker build -t="centos-jdk" .
查看构建的新镜像。
[root@master centos-jdk]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos-jdk latest bdf402785277 11 minutes ago 596MB
使用新构建的镜像运行容器验证JDK是否安装成功。
[root@master centos-jdk]# docker run -it centos-jdk /bin/bash
[root@2f9219541ca6 /]# java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
[root@2f9219541ca6 /]#
可以发现JDK已经安装成功了,至此,使用Dockerfile构建镜像已完成。
四、网络查看原生网络
[root@master ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
5226646e4d8e bridge bridge local
d32a6151a2b9 host host local
5c2396bdb3ef none null local
Docker默认网络模式是bridge模式, docker0网桥是在docker daemon启动时自动创建的,之后创建的docker容器都会在docker0自网范围内选取一个未占用的ip并连接到docker0网桥上,docker0以veth pair连接各容器的网络,容器中的数据通过docker0网桥转发到eth0网卡上。
创建一个busybox,网络为bridge,并展示网络详情
[root@master ~]# docker run -it --network=bridge busybox
/ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
创建一个busybox,网络为host,并展示网络详情
[root@master ~]# docker run -it --network=host busybox
/ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:2c:71:a7 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.20/24 brd 192.168.100.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe2c:71a7/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
link/ether 02:42:e1:59:03:2f brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:e1ff:fe59:32f/64 scope link
valid_lft forever preferred_lft forever
4: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue
link/ether f6:00:ad:a2:09:58 brd ff:ff:ff:ff:ff:ff
inet 10.16.0.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::f400:adff:fea2:958/64 scope link
valid_lft forever preferred_lft forever
5: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue qlen 1000
link/ether ae:2f:25:2d:b7:55 brd ff:ff:ff:ff:ff:ff
inet 10.16.0.1/24 scope global cni0
valid_lft forever preferred_lft forever
inet6 fe80::ac2f:25ff:fe2d:b755/64 scope link
valid_lft forever preferred_lft forever
6: veth326e6518@docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0
link/ether aa:e1:c6:81:29:03 brd ff:ff:ff:ff:ff:ff
inet6 fe80::a8e1:c6ff:fe81:2903/64 scope link
valid_lft forever preferred_lft forever
7: veth5738bd9a@docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0
link/ether 32:00:87:d9:08:2f brd ff:ff:ff:ff:ff:ff
inet6 fe80::3000:87ff:fed9:82f/64 scope link
valid_lft forever preferred_lft forever
8: vethb720dbc7@docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master cni0
link/ether 26:1a:9d:09:cf:54 brd ff:ff:ff:ff:ff:ff
inet6 fe80::241a:9dff:fe09:cf54/64 scope link
valid_lft forever preferred_lft forever
none模式是指禁用网络功能,只有lo接口,在容器创建时使用。
创建一个busybox,网络为none,并展示网络详情
[root@master ~]# docker run -it --network=none busybox
/ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)