命令记不住

登陆

docker 容器入门管理

docker容器使用

1.docker容器

1:什么是容器?
容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等

进程:正在运行的程序

2.docker的主要目标

1.docker的主要目标是"Build,Ship and Run any App,Angwhere",构建,运输,处处运行,一次构建,处处运行,
2.docker是一种软件的打包技术

  • 构建:做一个docker镜像
  • 运输:docker pull
  • 运行:启动一个容器
  • 每一个容器,他都有自己的文件系统rootfs.

3.docker的安装

1.卸载旧版

1.检测本机是否存在较老版本的docker检测的命令如下:

[root@docker ~]# rpm -qa docker docker-engine

# 注意:如果执行后没有返回代表没有安装旧版本`Docker`则不需要进行后续的操作。

2.如果返回后有相关软件包,代表已安装旧版本Docker那么需要卸载该软件包以及相关的依赖包,卸载的命令如下:

[root@docker ~]# yum remove -y docker \
               docker-common \
               container-selinux \
               docker-selinux \
               docker-engine \
     docker-engine-selinux
2.安装Docker容器

Centos安装Docker有如下三种方式:根据实际需要以不同的方式进行安装Docker。

  • 1.设置Docker的仓库并从中安装,以方便安装和升级任务。 #推荐此方法。
  • 2.更新CentOS操作系统,使用脚本自动化安装Docker。
  • 3.使用国内阿里云开源仓库,进行获取、更新、下载并安装Docker。
  1. 执行时间同步操作命令如下:
[root@docker ~]# yum install ntpdate -y
[root@docker ~]# ntpdate pool.ntp.org
  1. 安装yum-utils它提供yum-config-manager实用程序,安装命令如下:
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 执行以下操作设置稳定仓库源,并更新yum缓存,执行命令如下:
[root@docker ~]# yum-config-manager \
--add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker ~]# yum makecache fast
  1. 安装最新版本的Docker,安装命令如下:
[root@docker ~]# yum install –y docker-ce
  1. 启动Docker服务,并加入开机自启,配置命令如下:
[root@docker ~]# systemctl start docker
[root@docker ~]# systemctl enable docker
  1. Docker通过运行hello-world 镜像验证是否正确安装,执行如下命令:
[root@docker ~]# docker run hello-world
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
此命令完成的功能是下载测试镜像并在容器中运行它。当容器运行时,它打印一个" Hello from Docker!" 信息消息并退出,代表容器安装完成。
3.docker配置文件默认目录**

开启docker服务自动生成

root@Super:~# ls /var/lib/docker/
aufs/       containers/ image/      network/    plugins/    swarm/      tmp/        trust/      volumes/  

3.docker的主要组成部分
1.docker是传统的CS架构分为docker client和docker server,像 mysql一样.
2.docker主要组件有:镜像、容器、仓库, 网络,存储

3.docker info 命令用来做监控

[root@docker01 ~]# docker info
Containers: 17
Images: 4
Server Version: 18.09.2
Storage Driver: overlay2
Logging Driver: json-file
Cgroup Driver: cgroupfs
等等

5.docker镜像加速

1.镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com

##配置docker镜像加速
vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://oz89b7jo.mirror.aliyuncs.com"]
}

2.启动第一个容器

docker run -d -p 80:80 nginx
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
nginx 镜像的名字

3.重启docker服务,容器全部退出的解决办法
1).方法一:docker run --restart=always
2).方法二:"live-restore": true

docker server配置文件/etc/docker/daemon.json参考
{
"registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
"graph": "/opt/mydocker",
"insecure-registries":["10.0.0.11:5000"],
"live-restore": true
}

6.docker的镜像管理

1.搜索镜像

docker search

2.获取镜像
如果想查看镜像有哪些版本需要借助浏览器查询,命令行无法实现。

3.docker镜像相关操作

## 第三方docker镜像仓库,使用方法:
docker pull index.tenxcloud.com/tenxcloud/httpd:latest
查看镜像
    docker images  docker image  ls
删除镜像
    docker rmi  例子:docker image rm centos:latest
导出镜像
    docker save  例子:docker image save centos > docker-centos7.4.tar.gz
导入镜像
    docker load  例子:docker image load -i docker-centos7.4.tar.gz

7.docker的容器管理

1.启动并进入容器

[root@docker01 ~]# docker run -it --name centos6 centos:6.9 /bin/bash
[root@635adc21e7ec /]# 

-it // 分配交互式的终端 i=interaction t=terminal
--name // 指定容器的名字
centos:6.9 // 指定镜像的名称和版本
/bin/sh // 覆盖容器的初始命令

2.临时退出快捷键

ctrl +p,ctrl +q

3.杀死容器

docker kill container_name

4.查看容器列表

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

7.进入容器(目的,调试,排错)

docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)

docker attach(使用同一个终端)
docker attach [OPTIONS] CONTAINER

总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!
业务在容器中运行:1.夯住! 2.启动服务

8.docker容器的网络访问(端口映射)

指定映射(docker 会自动添加一条iptables规则来实现端口映射)
1.  -p hostPort:containerPort
2.  -p ip:hostPort:containerPort  多个容器都想使用80端口
3.  -p ip::containerPort(随机端口)
4.  -p hostPort:containerPort:udp
5.  -p 81:80 –p 443:443 可以指定多个-p

随机映射

docker run -P (随机端口)
  1. 通过iptables来实现的端口映射,需要内核转换参数。
[root@docker01 ~]# sysctl net.ipv4.ip_forward=0
net.ipv4.ip_forward = 0
[root@docker01 ~]# sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

2.查看iptables路由转发规则,来自于172.17网段的所有ip全部转发至物理网卡ip

[root@docker01 ~]# iptables -t nat -nvL

添加辅助ip

1.多个容器都想使用80端口,一个网卡配置多个ip

[root@docker01 ~]# ifconfig eth0:1 10.0.0.100/24 up
[root@docker01 ~]# ifconfig

2.一台机器一个端口绑定多个容器,使用多ip形式

[root@docker01 ~]# docker run -d -p 10.0.0.11:80:80 nginx:latest
[root@docker01 ~]# docker run -d -p 10.0.0.100:80:80 nginx:latest

3.随机端口访问,控制随机端口的范围是由系统内核参数控制

[root@docker01 ~]# docker run -d -p 10.0.0.100::80 nginx:latest

9.docker的数据卷管理

1.持久化

数据卷(文件或目录)
    -v 卷名:/data
    -v src(宿主机的目录):dst(容器的目录)
数据卷容器
    --volumes-from(共享,跟某一个已经存在的容器挂载相同的卷)

2.挂载数据卷

[root@docker01 ~]#  docker run -d -p 80:80  -v /opt/myregistry:/var/lib/registry nginx:latest

3.数据卷容器,存储持久化

[root@docker01 ~]# docker volume ls 
DRIVER              VOLUME NAME
local               oldvol
[root@docker01 ~]# docker volume ls -q
oldvol
[root@docker01 ~]# docker volume rm -f `docker volume ls -q`
oldboy
[root@docker01 ~]# docker volume create x86cloud
x86cloud
[root@docker01 ~]# docker volume ls 
DRIVER              VOLUME NAME
local               x86cloud
[root@docker01 ~]# docker volume inspect x86cloud 
[
 {
     "CreatedAt": "2019-02-24T01:59:15+08:00",
     "Driver": "local",
     "Labels": {},
     "Mountpoint": "/var/lib/docker/volumes/x86cloud/_data",
     "Name": "x86cloud",
     "Options": {},
     "Scope": "local"
 }
]

4.共享存储,共享同一个逻辑卷

[root@docker01 ~]# docker run -d -p 80:80 -v x86cloud:/usr/share/nginx/html 
[root@docker01 ~]# docker run -d -p 81:80 --volumes-from 10f3d932d35a  nginx:latest

10.手动将容器保存为镜像

docker commit 容器id或者容器的名字 新的镜像名字[:版本号可选]

[root@Proxydan ~]#docker commit 699e4f07b8dc centos6.9_ssh:v1
[root@Proxydan ~]#docker images 

1):基于容器制作镜像
镜像包含俩个服务1)sshd 2)nginx
镜像内要包含服务启动脚本,最后一条命令要夯住docker进程

docker run -it centos:6.9 
######
yum install httpd
yum install openssh-server
/etc/init.d/sshd start
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D

2)将容器提交为镜像

docker commit e46559c631b4 centos6.9_ssh_nginx:v1

3)测试镜像功能是否可用

docker run -d -p 1222:22 -p 80:80 centos6.9_ssh_nginx:v1 /bin/bash /init.sh

11.docker清理方案

1.查看资源占用情况

[admin@kuboard /tmp] SUSE云端服务器 
$docker system  df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              30                  11                  16.26GB             13.24GB (81%)
Containers          14                  7                   3.652GB             2.166GB (59%)
Local Volumes       41                  2                   12.7GB              1.749GB (13%)
Build Cache         0                   0                   0B                  0B

ACTIVE:镜像实际是我们不打算删除的

RECLAIMBLE:表示可回收的资源

2.查看详细资源占用情况

[admin@kuboard /tmp] SUSE云端服务器 
$docker system  df  -v
Images space usage:
Containers space usage:
Local Volumes space usage:
Build cache usage: 

3.资源自动清理命令

[admin@kuboard /tmp] SUSE云端服务器 
$docker  system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
9279613d8b78ada7ba90cda46fe609a94c54559592fad1902676e013f13d64f6
deced07baa49c5fb3748f402f817f65397c83419ed42db456c9e3dd1b4d57cbf
4aa2405bee8459dda02209991e9f79c90846e0a57c1302963f0124861cad2319
8c69e443e181be58015a744737eeff56f6aaf6d7af54a1e75f5b74d03c3f244d
dd3791be32744fb0f8745d5359f4308ee2685199a288f3c6f9a2c4f48a14616a
b93f2e2d3df9a0caa738d68784ad92986572f34ad96db0229a40d62d71aedc31
453315e4e8e1e2ffb324a212ef384cc5451bfb679deadf933537e5f18befc90c

Total reclaimed space: 2.166GB

参数:

-a慎用

-f慎用

4.手工清理

# 删除所有悬空镜像,但不会删除未使用镜像:
docker rmi $(docker images -f "dangling=true" -q)

# 删除所有未使用镜像和悬空镜像。
# 【说明】:轮询到还在被使用的镜像时,会有类似"image is being used by xxx container"的告警信息,所以相关镜像不会被删除,忽略即可。
docker rmi $(docker images-q)

# 删除所有未被任何容器关联引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)

# 也可以直接使用如下指令,删除所有未被任何容器关联引用的卷(但建议使用上面的方式)
# 【说明】轮询到还在使用的卷时,会有类似"volume is in use"的告警信息,所以相关卷不会被删除,忽略即可。
docker volume rm $(docker volume ls -q)

# 删除所有已退出的容器
docker rm -v $(docker ps -aq -f status=exited)
# 删除所有状态为 dead 的容器
docker rm -v $(docker ps -aq -f status=dead)

12.修改docker网桥ip

修改 /etc/docker/daemon.json文件 添加 “bip”: “192.168.99.1/24” <网段/掩码>

$cat  /etc/docker/daemon.json
{
  "log-level": "warn",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  },
  "registry-mirrors": ["https://68x5k838.mirror.aliyuncs.com"],
  "graph": "/data/dockerdata",
  "bip": "192.168.99.1/24"
}

保存后重启docker服务

推荐阅读