最近在做一个比赛,要求使用docker提交,就入门了一下。在入门的过程中,网上关于docker的内容太理论和繁琐,这里给出一个快速上手并使用docker的方法。
关于docker入门的第一步请参考,下面的两个网址,我就不重复造轮子了,看的很快:
Docker 教程
https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/entrypoint.html
需要说明几点:
可能看完了上面的教程你还是不知道到底应该怎样使用docker,如我有了一个dcoker镜像,怎么把自己的代码放进入呢,怎样安装依赖呢。下面我就讲一下,到底该怎样快速上手一个dcoker。
From iqiyi:4.0
MAINTAINER lavi "[email protected]"
WORKDIR /
ENTRYPOINT cd iqiyi && python test1.py
docker cp 本地文件路径 ID全称:容器路径
sudo docker login --username=[username] hub.baidubce.com #切换仓库
sudo docker pull 镜像名:tag #从仓库拉取镜像到本地
sudo docker push 镜像名:tag #上传镜像到仓库
1. docker run 创建并启动一个容器
sudo docker run -i -t ubuntu /bin/bash
让我们来分析一下这条简单的命令吧:
sudo docker run -i -t 镜像名称 命令代码
root@41225bc38698:/# hostname
# 41225bc38698
root@41225bc38698:/# cat /etc/hosts
# 172.17.0.8 41225bc38698
# 127.0.0.1 localhost
# ::1 localhost ip6-localhost ip6-loopback
# fe00::0 ip6-localnet
# ff00::0 ip6-mcastprefix
# ff02::1 ip6-allnodes
# ff02::2 ip6-allrouters
此外,我们还可以安装一个软件包,以vim为例:
apt-get update && apt-get install vim
执行如下命令后,我们可以成功的安装完成vim。 当我们使用完成该容器后,可以使用exit来退出容器。
此时,容器会停止命令,同时我们回到了宿主机的命令行提示符。 Ps:此时,容器仅仅是停止运行,但是并没有被销毁。 我们可以使用如下命令查看当前系统中存在的容器:
docker ps -a
其中,默认docker ps命令会查询到所有正在运行的容器,添加参数-a后,则无论是否在运行中,都会被查找到。
从上表可以看出,我们可以通过docker ps命令可以查询到容器的很多有用信息,包括:ID、镜像、命令、创建时间、退出状态、端口以及容器名称等
2. 创建一个指定名称的容器,并启动
我们已经提到了每个容器都有其对应的一个名称。 默认情况下,如果没有指定容器名称,系统将会自动随机生成一个唯一的名称。 当然,我们也可以直接来指定容器的名称,此时,使用–name 容器名来实现。
例如:
sudo docker run --name nianshi_test -i -t ubuntu /bin/bash
此时,我们将会创建一个容器名称为nianshi_test的容器。 一个合法的容器名称是只能由字母、数字、下划线、圆点和横线组成的。
Ps:容器名称必须是唯一的,如果我们试图创建两个同名的容器时将会失败。容器名称是一个可以替代容器id的有利工具,合理利用容器名称可以大幅提高工作效率。
3. 启动已停止的容器
当一个容器已经停止后,我们可以使用docker start命令来重新启动该容器。
根据容器名称启动 sudo docker start nianshi_test
根据容器id启动sudo docker start 41225bc38698
在我们重新启动容器后,将会继续沿用之前docker run运行时的参数来运行。但是,此时我们并没有直接进入到交互式shell的环境。 需要再次执行如下命令才能进行到交互式shell的环境:
sudo docker attach nianshi_test
ps:有时在执行完该命令后,需要再次敲击一个回车才能看到交互式shell。
还可以把start换成restart,重新启动一个容器。
4.创建守护式容器
在之前的内容中,我们主要讲解了如何创建一个交互式的环境。 还有更多的时候,我们可以期望是创建一个长期运行的容器。对于此类容器,我们称之为守护式容器,它们没有交互式会话,非常适合应用程序和服务运行。 以下面的代码为例:
sudo docker run --name nianshi_test1 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
# 066762ca46506b0ed27aaeb266da6b662e38111604150a3448dc2adae7449b31
其中,我们可以看到在docker run命令中,我们使用了-d参数,表示将程序放在后台执行。
而执行脚本的本身含义则表示每隔1s打印一个hello world,直到容器停止。
5. 查看容器日志
那么我们如何看这些守护式容器的日志呢? Docker本身提供了docker logs用于日志查询。
sudo docker logs nianshi_test1
该命令会输出最后几条日志并返回。 更为推荐的一种方式是添加-f参数,用于监控容器的日志,功能类似于tail -f。
sudo docker logs -f nianshi_test1
此外,我们还可以使用-t-参数来添加时间戳。
sudo docker logs -f -t nianshi_test1
# 2018-01-23T03:56:40.821800852Z hello world
# 2018-01-23T03:56:41.822581880Z hello world
有关容器的更多操作请参考:Docker新手入门之三:Docker容器的基本使用
docker build -t aicontest-demo:1.0 -f /path/to/your/Dockerfile 上下问路径
sudo docker build
1.查看当前有些什么images
docker images
2.查看多有的容器
docker ps -a
2.查看多有的容器,只显示容器id
docker ps -a -p
1.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
2.如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
3.删除images,通过image的id来指定删除谁
docker rmi
4.想要删除untagged images,也就是那些id为的image的话可以用
docker rmi $(docker images | grep "^" | awk "{print $3}")
5.要删除全部image的话
docker rmi $(docker images -q)
注:所有的docker命令如果提示权限问题的话,请加sudo
docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
#例子
docker tag ca1b6b825289 registry.cn-hangzhou.aliyuncs.com/xxxxxxx:v1.0
参考文献
- Docker 容器镜像删除
- Docker 重命名镜像 TAG
- Docker新手入门之三:Docker容器的基本使用