Docker基本使用

1. Docker简介

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布任何流行的Linux或Windows机器上。使用Docker可以更方便地打包、测试以及部署应用程序。

2. Docker环境安装

2.1 安装yum-utils

yum install -y yum-utils device-mapper-persistent-data lvm2

2.2 为yum源添加docker仓库位置

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2.3 安装docker

yum install docker-ce

2.4 启动docker

systemctl start docker

3. Docker镜像常用命令

3.1 搜索镜像

docker search java

3.2 下载镜像

docker pull java:8

3.3 查找镜像支持的版本

由于docker search命令只能查找出是否有该镜像,不能找到该镜像支持的版本,所以我们需要通过docker hub来搜索支持的版本。

进入docker hub的官网,地址:https://hub.docker.com/

然后搜索需要的镜像,找到后查找镜像支持的版本,然后进行镜像的下载操作:

docker pull nginx:1.17.0

3.4 列出镜像

docker images

3.5 删除镜像

3.5.1 指定名称删除镜像

docker rmi java:8

3.5.2 指定名称删除镜像(强制)

docker rmi -f java:8

3.5.3 删除所有没有引用的镜像

docker rmi `docker images|grep none|awk '{print $3}'`

3.5.4 强制删除所有镜像

docker rmi -f ${docker images}

4. Docker容器常用命令

4.1 新建并启动容器

docker run -p 80:80 --nane nginx -d nginx:1.17.0
  • -d选项:表示后台运行
  • --name选项:指定运行后容器的名字为nginx,之后可以通过名字来操作容器
  • -p选项:指定端口映射,格式为:hostPort:containerPort

4.2 列出容器

4.2.1 列出运行中的容器

docker ps

4.2.2 列出所有容器

docker ps -a

4.3 停止容器

docker stop $containerName
# 或者
docker stop $containerId

4.4 强制停止容器

docker kill $containerName
# 或者
docker kill $containerId

4.5 启动已停止的容器

docker start $containerName
# 或者
docker start $containerId

4.6 进入容器

4.6.1 查出容器的pid

docker inspect --format "{{.State.Pid}}" $containerName
# 或者
docker inspect --format "{{.State.Pid}}" $containerId

4.6.2 根据容器pid进入容器

nsenter --target "$pid" --mount --uts --ipc --net --pid

4.7 删除容器

4.7.1 删除指定容器

docker rm $containerName
# 或者
docker rm $containerId

4.7.2 按名称删除容器

docker rm `docker ps -a|grep 容器名称*|awk '{print $1}'`

4.7.3 强制删除所有容器

docker rm -f ${docker ps -a -q}

4.8 查看容器的日志

4.8.1 查看当前全部日志

docker logs $ContainerName(或者$ContainerId)

4.8.2 动态查看日志

docker logs $ContainerName(或者$ContainerId) -f

4.9 查看容器的IP地址

docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerName(或者$ContainerId)

4.10 修改容器的启动方式

docker container update --restart=always $ContainerName

4.11 同步宿主机时间到容器

docker cp /etc/localtime $ContainerName(或者$ContainerId):/etc/

4.12 指定容器时区

bash docker run -p 80:80 --name nginx \e TZ="Asia/Shanghai" \d nginx:1.17.0

4.13 在宿主机查看docker使用cpu、内容、网络、io情况

4.13.1 查看指定容器情况

docker stats $ContainerName(或者$ContainerId)

4.13.2 查看所有容器情况

docker stats -a

4.14 查看Docker磁盘使用情况

docker system df

4.15 进入Docker容器内部的bash

docker exec -it $ContainerName /bin/bash

4.16 Docker创建外部网络

docker network create -d bridge my-bridge-network

4.17 Docker修改容器配置

修改容器的配置,需要重启Docker服务,否则会失败。

  • 查找容器的ID
docker ps -l
  • 查找容器的UUID
docker inspect containerId | grep Id
  • 停止容器,停止服务
docker stop A
systemctl stop docker
  • 修改容器配置
    文件路径:/var/lib/docker/containers/{containerUUID}/hostconfig.json,如果要改映射端口,则修改HostPort字段

  • 重启服务,启动容器

systemctl start docker
docker start A

4.18 在容器运行时添加映射

iptables -t nat -A DOCKER -p tcp --dport 宿主机端口 -j DNAT --to-destination 容器ip:容器端口

4.19 查看容器IP

docker inspect --format='{{.NetworkSettings.IPAddress}}' $(docker ps -a -q)

4.20 在容器运行时添加宿主机重启自动启动容器

docker update --restart=always <CONTAINER_ID>

5. 修改Docker镜像的存放位置

5.1 查看Docker镜像的存放位置

docker info | grep "Docker Root Dir"

5.2 关闭Docker服务

systemctl stop docker

5.3 移动目录到目标路径

mv /var/lib/docker /mydata/docker

5.4 建立软链接

ln -s /mydata/docker /var/lib/docker

6. 查看容器IP的方法

  1. 进入容器内部后,执行命令:
cat /etc/hosts

会显示自己以及(--link)软链接的容器IP。

  1. 使用命令docker inspect
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
  1. 要获取所有容器名称及其IP地址只需一个命令:
docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

如果使用 docker-compose命令则是:

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
  1. 显示所有容器IP地址:
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

经验:可以考虑在 ~/.bashrc 中写一个bash函数:

function docker_ip() {
    ? ? sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ?$1
}
function dockeriplist() {
    ? ? sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}

执行:

docker_ip <container-ID>

可以看到单个容器的IP地址,执行 dockeriplist可以列出所有的IP地址。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • docker命令简单使用 1.1 镜像 Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Do...
    道无虚阅读 509评论 0 0
  • 如果之前有过安装docker,先卸载之前版本 首先,更新现有的软件包列表: 接下来,安装一些必备软件包,这些apt...
    alfalfaw阅读 422评论 0 0
  • docker[Centos 7]: 个人理解的docker,核心为镜像和容器。docker可以运行在各大系统上,这...
    aidem_aosun阅读 318评论 0 3
  • 基本理解 镜像、容器和仓库 这三个是docker里常见的概念,镜像可以理解成一个个操作系统的安装包,而容器就是我们...
    dawsonenjoy阅读 466评论 0 2
  • 1. 为什么引入Docker Docker现在大受追捧,风光无二。Docker是一个轻量级的容器技术,类似于虚拟机...
    造一个大大的轮子阅读 312评论 0 1