docker学习笔记-1.docker基础

docker基本

docker 官方网址  https://www.docker.com

docker 目前支持多种操作系统的安装,在linux系统中要求内核的版本在3.10或以上版本。

2017年 docker推出新的项目Moby,github地址为:https://github.com/moby/moby ,Moby属于Docker项目的全新上游项目,Docker将是一个隶属于Moby的子产品,之后的版本将分为CE(社区版)和EE(企业版)

docker从2017.3.1开始每个季度发布一个稳定版本,其版本规则变更为YY.MM

CE版本 维护四个月,EE版本维护一年

本次docker的实验都是基于centos7.5。

本次学习的docker版本为1803

阿里云的rpm下载地址

https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

官方rpm包的下载地址

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

docker安装和操作

 下载安装docker

 启动并验证docker服务

查看docker的版本

docker version

验证docker网卡

在docker启动后,默认生成一个名为docker0的网卡,并默认IP地址为172.17.0.1

查看docker信息

docker info

docker存储引擎

目前docker的默认存储引擎为overlay2,需要磁盘分区支持d-type文件分层功能,因此需要系统磁盘额外的支持。

如果docker的数据目录为一块单独的磁盘分区,并且是xfs格式,那么需要在格式化磁盘时候,加上参数 -n ftype=1,否则后期启动容器的时候会报不支持d-type.

docker镜像加速配置

国内下载国外镜像有时候会很慢,因此有时候可以更改docker配置文件添加一个加速器,可以通过加速器达到加速下载目的。

https://cr.console.aliyun.com/

创建目录 

[root@localhost docker]# mkdir /etc/docker/

创建文件并修改

[root@localhost docker]# vi daemon.json

[root@localhost docker]# cat daemon.json
{"registry-mirrors":["https://7mbt1t62.mirror.aliyuncs.com"]}
[root@localhost docker]#

重启docker服务

[root@localhost docker]# systemctl daemon-reload
[root@localhost docker]# systemctl restart docker

docker镜像基础命令

不指定版本&指定版本

 [root@localhost docker]# docker search centos

[root@localhost docker]# docker search centos:7.5

从docker仓库将镜像下载到本地

[root@localhost docker]# docker pull centos

查看本地镜像

下载完成的镜像比下载的大,因为下载完成后会解压。

#Repository 镜像所属的名称

#TAG 镜像版本号 默认为latest

#IMAGE ID 镜像唯一ID表示

#CREATED 镜像创建时间

#SIZE 镜像的大小

镜像导出

可以将镜像导出到本地为一个压缩文件,然后复制到其他服务器进行导入使用。

镜像导出方法1

 [root@localhost data]# docker save centos >/root/data/centos-1.tar.gz

镜像导出方法2

[root@localhost data]# docker save -o /root/data/centos-2.tar.gz centos

 查看镜像的内容

包含了镜像的相关配置,配置文件分层,分层是为了方便文件使用,即相同的文件可以共用。

镜像导入

两种方法进行导入

docker load </root/data/centos-1.tar.gz

docker load -i /root.data/centos-2.tar.gz

删除镜像

当有容器使用该镜像启动运行时,该镜像不能删除。

docker rmi centos

获取运行参数帮助

docker daemon -help

删除容器

删除没有在运行的镜像

docker rm  容器ID|容器名称

强制删除正在运行的镜像

docker rm -rf 容器ID|容器名称

docker的基础操作命令  

单次运行,没有自定义容器名称。启动的容器在执行完shell命令后就退出

[root@localhost data]# docker run centos echo 'hello world.'

查看正在运行的容器

[root@localhost data]# docker ps 

查看所有的容器,包括退出的容器。

[root@localhost data]# docker ps -a

从镜像启动一个容器,并随机生成容器ID和名称

退出容器  ctrl+p+q

 

随机映射端口

[root@localhost ~]# docker pull nginx

在前台启动容器,退出后容器也会退出,-P  随机映射端口

[root@localhost ~]# docker run -P nginx

从另一个终端查看容器宿主机的端口的映射,默认是从32768开始的

 

 

 

 

指定端口映射&指定启动容器的名字 --name   -p  指定端口映射

[root@localhost data]# docker run -p 8888:80 --name nginx-1  nginx

可以一次性映射多个端口

[root@localhost ~]# docker run -p 8888:80 -p 8889:443 --name nginx-2 nginx

可以指定协议,默认协议为tcp   -d  表示 在容器宿主机的后台执行

[root@localhost ~]# docker run -d -p 8883:80/udp --name nginx-4 nginx

查看容器的访问日志

[root@localhost ~]# docker logs  nginx-1 # 一次查看

[root@localhost ~]# docker logs  -f nginx-13  #持续查看

查看容器已经映射的端口

[root@localhost ~]# docker port nginx-1

 自定义容器名称 并在前台执行

[root@localhost ~]# docker run  -it  --name nginx-test nginx

自定义容器名称 并在后台执行

[root@localhost ~]# docker run  -d -p 8888:80  --name nginx-test nginx

创建容器,并进入容器

[root@localhost ~]# docker run  -it  --name centos-test centos /bin/bash

创建容器,在前台执行,退出容器后,容器自动删除

[root@localhost ~]# docker run  -it  -rm --name nginx-test nginx

容器的传递命令,容器需要一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外一种方式在构建镜像的时候指定容器启动时的运行的前台命令。

[root@localhost ~]# docker run  -d   --name centos-test centos  /usr/bin/tail -f '/etc/hosts'  

 容器的启动和关闭

[root@localhost ~]# docker start cb3745225159

[root@localhost ~]# docker stop cb3745225159

进入正在使用的容器

方法1

此方法进入容器后会同步给所以进入容器的用户;exit退出容器后,容器关闭。不推荐使用

[root@localhost ~]# docker attach cf41e382bba6    # 后面跟容器id或者容器名称

 

方法2 

使用nsenter命令

推荐使用此方法,nsenter命令需要通过PID进入容器内部,可以使用docker inspect 获取容器的PID

[root@localhost ~]# yum install util-linux  #安装nesenter命令

[root@localhost ~]# docker inspect -f "{{.State.Pid}}" cf41e382bba6    #后面跟容器的ID

获取到某个docker容器的PID,可以通过PID通道进入到容器中

安装nsenter 命令

util-linux包中含有nsenter命令,下载 util-linux的源码包 https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24-rc2.tar.gz

./configure --without-ncurses --prefix=/opt/util/

make && make install

执行命令 进入容器

[root@192 tool]# docker ps -a

[root@192 tool]# docker inspect -f "{{.State.Pid}}" cf41e382bba6

[root@192 ~]# nsenter  -t 3916 -m -u -i -n -p

使用docker-in.sh进入容器

1 #!/bin/bash                                                  
2 docker_in(){                                                 
3   NAME_ID=$1                                                 
4   PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})       
5   nsenter -t ${PID} -m -u -i -n -p                           
6 }                                                            
7 docker_in $1                                                 

 查看容器的 hosts文件

[root@192 ~]# docker run -it --name sakula centos /bin/bash

[root@254bdef59ba0 /]# cat /etc/hosts

172.17.0.4      254bdef59ba0  #  默认会将实例ID添加到hosts文件中

批量关闭正在运行的容器

[root@192 ~]# docker stop `docker ps -q`

批量强制关闭正在运行的容器

[root@192 ~]# docker kill $(docker ps -a -q)

批量删除已将退出的容器

[root@192 ~]# docker rm -f `docker ps -a -q -f status=exited`

批量删除所有的容器

[root@192 ~]# docker rm -f $(docker ps -a -q)

指定容器的dns

dns服务,默认采用宿主机的dns地址

1 将dns地址配置在宿主机

2 将参数配置在docker 启动脚本中 --dns=1.1.1.1

[root@192 ~]# docker run -ti --rm  --dns=1.1.1.1 centos /bin/bash

 

 

posted @ 2018-07-09 14:52  hexintong  阅读(188)  评论(0编辑  收藏  举报