Docker入门

一、Docker定义

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
1. DockerClient客户端
2. Docker Daemon守护进程
3. Docker Image镜像
4. DockerContainer容器

二、Docker安装卸载

1.CentOS Docker 安装卸载

卸载旧版本:

$ sudo yum remove docker \
             docker-client \
             docker-client-latest \
             docker-common \
             docker-latest \
             docker-latest-logrotate \
             docker-logrotate \
             docker-engine

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2,缺一不可。

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用官方源地址比较慢,可以选择国内的一些地址,设置 Docker 仓库之后,可以从诸如阿里云仓库安装和更新 Docker。

$ sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

列出并排序存储库中可用的版本:

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1.

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

启动 Docker:

$ sudo systemctl start docker

通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community:

$ sudo docker run hello-world

卸载docker:

yum remove docker-ce

删除镜像、容器、配置文件等内容:

rm -rf /var/lib/docker

三、Docker常用命令

docker run :创建一个新的容器并运行一个命令:
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 /data:/data -d nginx:latest

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令:

root@root:~$ docker run -it nginx:latest /bin/bash
root@d83456567d575:/# 

docker start/stop/restart:
docker start [OPTIONS] CONTAINER [CONTAINER…]
docker start [OPTIONS] CONTAINER [CONTAINER…]
docker start [OPTIONS] CONTAINER [CONTAINER…]

docker start mytomcat

docker rm:删除一个或多个容器:
docker rm [OPTIONS] CONTAINER [CONTAINER…]

OPTIONS说明:
	-f :通过 SIGKILL 信号强制删除一个运行中的容器。
	-l :移除容器间的网络连接,而非容器本身。
	-v :删除与容器关联的卷。

强制删除容器 tomcat01、tomcat02:

docker rm -f tomcat01 tomcat02

删除容器 tomcat01 , 并删除容器挂载的数据卷:

docker rm -v tomcat01 

删除所有已经停止的容器:

docker rm $(docker ps -a -q)

容器 tomcat01 中开启一个交互模式的终端:

root@root:~$ docker exec -i -t  tomcat01  /bin/bash

或使用容器id:

# docker exec -it 9df70f9a0714 /bin/bash

docker ps : 列出容器:docker ps [OPTIONS]

OPTIONS说明:
	-a :显示所有的容器,包括未运行的。
	-f :根据条件过滤显示的内容。
	--format :指定返回值的模板文件。
	-l :显示最近创建的容器。
	-n :列出最近创建的n个容器。
	--no-trunc :不截断输出。
	-q :静默模式,只显示容器编号。
	-s :显示总的文件大小。

列出最近创建的3个容器信息:

root@root:~$ docker ps -n 5

列出所有容器:

root@root:~$ docker ps -a 

docker inspect : 获取容器/镜像的元数据:
docker inspect [OPTIONS] NAME|ID [NAME|ID…]

OPTIONS说明:
	-f :指定返回值的模板文件。
	-s :显示总的文件大小。
	--type :为指定类型返回JSON。

docker top :查看容器中运行的进程信息,支持 ps 命令参数:
docker top [OPTIONS] CONTAINER [ps OPTIONS]
查看容器tomcat01的进程信息:

runoob@runoob:~/mysql$ docker top mymysql
UID    PID    PPID    C      STIME   TTY  TIME       CMD
999    40347  40331   18     00:58   ?    00:00:02   tomcat01

查看所有运行容器的进程信息:

for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

docker events : 从服务器获取实时事件:
docker events [OPTIONS]

OPTIONS说明:
	-f :根据条件过滤事件;
	--since :从指定的时间戳后显示所有事件;
	--until :流水时间显示到指定的时间为止;

显示docker 镜像为mysql:5.6 2016年7月1日后的相关事件:

runoob@runoob:~/mysql$ docker events -f "image"="mysql:5.6" --since="1467302400" 
2016-07-11T00:38:53.975174837+08:00 container start 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql)
2016-07-11T00:51:17.022572452+08:00 container kill 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql, signal=9)
2016-07-11T00:51:17.132532080+08:00 container die 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (exitCode=137, image=mysql:5.6, name=mymysql)
2016-07-11T00:51:17.514661357+08:00 container destroy 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:18.551984549+08:00 container create c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:18.557405864+08:00 container attach c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:18.844134112+08:00 container start c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:19.140141428+08:00 container die c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (exitCode=1, image=mysql:5.6, name=mymysql)
2016-07-11T00:58:05.941019136+08:00 container destroy c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:58:07.965128417+08:00 container create a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)
2016-07-11T00:58:08.188734598+08:00 container start a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)
2016-07-11T00:58:20.010876777+08:00 container top a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)
2016-07-11T01:06:01.395365098+08:00 container top a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)

如果指定的时间是到秒级的,需要将时间转成时间戳。如果时间为日期的话,可以直接使用,如–since=“2016-07-01”。

docker logs :获取容器的日志
docker logs [OPTIONS] CONTAINER

OPTIONS说明:
	-f : 跟踪日志输出
	--since :显示某个开始时间的所有日志
	-t : 显示时间戳
	--tail :仅列出最新N条容器日志

查看容器mynginx从2016年7月1日后的最新10条日志:

docker logs --since="2016-07-01" --tail=10 mynginx

docker stats : 显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等:
docker stats [OPTIONS] [CONTAINER…]

OPTIONS 说明:
	--all , -a :显示所有的容器,包括未运行的。
	--format :指定返回值的模板文件。
	--no-stream :展示当前状态就直接退出了,不再实时更新。
	--no-trunc :不截断输出。

列出所有在运行的容器信息:

runoob@runoob:~$  docker stats
CONTAINER ID        NAME                                    CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b95a83497c91        awesome_brattain                        0.28%               5.629MiB / 1.952GiB   0.28%               916B / 0B           147kB / 0B          9
67b2525d8ad1        foobar                                  0.00%               1.727MiB / 1.952GiB   0.09%               2.48kB / 0B         4.11MB / 0B         2
e5c383697914        test-1951.1.kay7x1lh1twk9c0oig50sd5tr   0.00%               196KiB / 1.952GiB     0.01%               71.2kB / 0B         770kB / 0B          1
4bda148efbc0        random.1.vnc8on831idyr42slu578u3cr      0.00%               1.672MiB / 1.952GiB   0.08%               110kB / 0B          578kB / 0B          2

docker commit :从容器创建一个新的镜像:
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:
	-a :提交的镜像作者;
	-c :使用Dockerfile指令来创建镜像;
	-m :提交时的说明文字;
	-p :在commit时,将容器暂停。
runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mymysql             v1                  37af1236adef        15 seconds ago      329 MB

docker pull : 从镜像仓库中拉取或者更新指定镜像:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:
	-a :拉取所有 tagged 镜像
	--disable-content-trust :忽略镜像的校验,默认开启

从Docker Hub下载java最新版镜像:

docker pull java

docker images : 列出本地镜像:
docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:
	-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
	--digests :显示镜像的摘要信息;
	-f :显示满足条件的镜像;
	--format :指定返回值的模板文件;
	--no-trunc :显示完整的镜像信息;
	-q :只显示镜像ID。

列出本地镜像中REPOSITORY为ubuntu的镜像列表:

root@runoob:~# docker images  ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        9 weeks ago         188 MB
ubuntu              15.10               4e3b13c8a266        3 months ago        136.3 MB

docker rmi : 删除本地一个或多个镜像:
docker rmi [OPTIONS] IMAGE [IMAGE…]

OPTIONS说明:
	-f :强制删除;
	--no-prune :不移除该镜像的过程镜像,默认移除;

强制删除本地镜像 runoob/ubuntu:v4:

root@runoob:~# docker rmi -f runoob/ubuntu:v4
Untagged: runoob/ubuntu:v4
Deleted: sha256:1c06aa18edee44230f93a90a7d88139235de12cd4c089d41eed8419b503072be
Deleted: sha256:85feb446e89a28d58ee7d80ea5ce367eebb7cec70f0ec18aa4faa874cbd97c73

docker build 命令用于使用 Dockerfile 创建镜像:
docker build [OPTIONS] PATH | URL | -

OPTIONS说明:
	--build-arg=[] :设置镜像创建时的变量;
	--cpu-shares :设置 cpu 使用权重;
	--cpu-period :限制 CPU CFS周期;
	--cpu-quota :限制 CPU CFS配额;
	--cpuset-cpus :指定使用的CPU id;
	--cpuset-mems :指定使用的内存 id;
	--disable-content-trust :忽略校验,默认开启;
	-f :指定要使用的Dockerfile路径;
	--force-rm :设置镜像过程中删除中间容器;
	--isolation :使用容器隔离技术;
	--label=[] :设置镜像使用的元数据;
	-m :设置内存最大值;
	--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
	--no-cache :创建镜像的过程不使用缓存;
	--pull :尝试去更新镜像的新版本;
	--quiet, -q :安静模式,成功后只输出镜像 ID;
	--rm :设置镜像成功后删除中间容器;
	--shm-size :设置/dev/shm的大小,默认值是64M;
	--ulimit :Ulimit配置。
	--squash :将 Dockerfile 中所有的操作压缩为一层。
	--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
	--network: 默认 default。在构建期间设置RUN指令的网络模式

使用当前目录的 Dockerfile 创建镜像,标签为 runoob/ubuntu:v1:

docker build -t runoob/ubuntu:v1 .

使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像:

docker build github.com/creack/docker-firefox

也可以通过 -f Dockerfile 文件的位置:

$ docker build -f /path/to/a/Dockerfile .

docker save : 将指定镜像保存成 tar 归档文件:
docker save [OPTIONS] IMAGE [IMAGE…]

OPTIONS 说明:
	-o :输出到的文件。

将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档:

runoob@runoob:~$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

docker load : 导入使用 docker save 命令导出的镜像:
docker load [OPTIONS]

OPTIONS 说明:
	--input , -i : 指定导入的文件,代替 STDIN。
	--quiet , -q : 精简输出信息。

三、Docker容器通信

待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值