Docker笔记

一、安装

1、卸载旧版本

yum remove docker docker-client docker-client-latest docker-common docker-latest \

                    docker-latest-logrotate docker-logrotate docker-engine

2、需要的安装包

yum install -y yum-utils

3、设置镜像仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #国外地址

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里云

4、更新yum软件包索引

yum makecache fast

5、安装docker docker-ce社区版(ee是企业版) 

yum install docker-ce docker-ce-cli containerd.io

6、启动Docker

systemctl start docker

7、查看docker版本

docker version

8、执行第一个docker hello-word

docker run hello-world

9、查看下载的hello-world镜像

docker images

二、卸载Docker

1、卸载依赖

yum remove docker-ce docker-ce-cli containerd.io

2、删除资源

rm -rf /var/lib/docker #docker默认工作路径

rm -rf /var/lib/containerd

三、阿里云镜像加速

1、配置镜像地址

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://po1qcvly.mirror.aliyuncs.com"]

}

EOF

2、重置守护进程

sudo systemctl daemon-reload

3、重启Docker

sudo systemctl restart docker

四、Docker底层原理

Docker是一个C/S结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!

Client-Server接收到Client-Client的指令,就会执行这个命令

1、Docker为什么比VM快

1)Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。

2)Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。

总结:新建一个容器的时候,Docker不需要向虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载Guest OS,分钟级别的而Docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!

五、Docker常用命令

1、帮助命令

docker version #显示docker的版本信息

docker info #显示docker的系统信息 包括镜像和容器的数量

docker 命令 --help #万能命令

帮助文档地址:https://docs.docker.com/reference/

2、镜像命令

docker images 查看所有本地的主机上的镜像

[root@localhost /]# docker images

REPOSITORY      TAG      IMAGE ID              CREATED      SIZE

hello-world            latest     d1165f221234       4 months ago 13.3kB

REPOSITORY       镜像的仓库源

TAG                       镜像的标签

IMAGE ID              镜像的id

CREATED             镜像的创建时间

SIZE 镜像的大小

    -a, --all          列出所有的镜像

    -q, --quiet      只显示镜像的Id

docker search 搜索镜像

#搜索mysql镜像

docker search mysql

#可选项,通过搜藏来过滤

--filter =stars=3000      #搜索出来的镜像就是stars大于3000

docker pull 下载镜像

#下载镜像

docker pull 镜像名[:tag]版本默认最新版

[root@localhost /]# docker pull mysql

docker pull mysql === docker pull docker.io/library/mysql:latest

#指定版本下载

[root@localhost /]# docker pull mysql:5.7

docker rmi 删除镜像

#删除指定ID镜像

docker rmi -f 镜像ID

#删除指定ID镜像 (多个)

docker rmi -f 镜像ID 镜像ID 镜像ID 镜像ID

#递归删除所有镜像

docker rmi -f $(docker images -aq) 意思是全部镜像的id

3、容器命令

注意:有了镜像才能 通过镜像创建容器

docker run [可选参数] image 新建容器并启动

docker run [可选参数] image

#参数说明

--name=“Name” 容器名称 tomcat01

-d 后台方式运行

-it 使用交互方式运行,进入容器查看内容

-p 指定容器的端口 -p 8080:8080

    -p ip:主机端口:容器端口

    -p 主机端口:容器端口(常用)

    -p 容器端口

-P 随机指定端口

#测试 进入容器 ,启动以交互方式运行后面是操作控制台 一般Linux的在这个路径

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

#查看容器内的centos基础版本很多命令都是不完善的 (centos里面创建centos并进入)

[root@1797b984e8ee /]# ls

bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

#从容器中退回到主机

[root@1797b984e8ee /] exit # exit

[root@localhost /]# ls

bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

docker ps 列出所有正在运行的容器

# docker ps 命令

空 # 列出当前正在运行的容器

-a # 列出当前正在运行的容器 随便带出历史的内容

-n=?# 显示最近创建的容器 ?后面是显示的个数

-q # 只显示容器的编号

#列出当前在运行的容器 (下面表示没有)

[root@localhost /]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

#查看曾经运行过的容器

[root@localhost /]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAME

Se270f5d60b2c centos "/bin/bash --name=ba…" 5 minutes ago Exited (2) 5 minutes ago recursing_gagarin

b80479a9e9b3  centos "/bin/bash" 9 minutes ago Exited (0) 7 minutes ago strange_jemison

fb14b327581a   d1165f221234 "/hello" 8 hours ago Exited (0) 8 hours ago eager_varahamihira

exit、Ctrl + P + Q 退出容器

#退出容器

exit                #停止容器并退出容器

Ctrl + P + Q   #只是退出容器,容器仍在运行

docker rm 删除容器

docker rm                                   #容器id 删除指定容器

docker rm -f $(docker ps -aq)     #删除所有容器

docker ps -a -q|xargs docker rm #删除所有容器

docker start、docker stop 启动和停止容器

docker start 容器id         #启动容器

docker restart 容器id      #重启动容器

docker stop 容器id         #停止当前正在运行动容器

docker kill 容器id            #强制停止当前容器

其他命令

#通过命令

docker run -d 镜像名

[root@bogon /]# docker run -d centos

#问题 docker ps 时候发现 centos停止了

#常见的坑,docker 容器后台运行,就必须要有一个前台进程 docker发现没有命令就会停止

#nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

docker logs 查看日志

docker logs -f -t --tail 10 #容器id 没有日志 

# 自己编写一段shell脚本

[root@bogon /]# docker run -d centos /bin/sh -c "while true;do echo Sxr;sleep 1;done"

[root@bogon /]# docker ps

PORTS NAMES

d5d5d925582f centos 

#显示日志

-tf #显示日志 f带上时间

--tail number #要显示的日志条数

[root@bogon /]# docker logs -f -t --tail 10 d5d5d925582f 

[root@bogon /]# docker logs -tf --tail 10 d5d5d925582f 

docker top 查看容器中的进程信息ps

top命令

[root@bogon /]# docker top 容器id

UID PID PPID C STIME TTY TIME

root 3064 3044 0 09:37 ? 00:00:00

root 3117 3064 0 09:38 ? 00:00:00

docker inspect 查看进行的源数据

[root@bogon /]# docker inspect

docker exec 进入当前正在运行的容器

#我们通常容器都是使用后台方式运行的需要进入容器,修改一些配置

#命令

docker exec -it 容器id bashshell

# bashshell 操作 linux或者别的操作命令

#测试

[root@bogon /]# docker exec -it d5afb8e77654 /bin/bash

[root@d5afb8e77654 /]# ls

bin etc lib lost+found mnt proc run srv tmp vardev home lib64 media opt root sbin sys usr

[root@d5afb8e77654 /]# ps -ef

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 01:37 ? 00:00:00 /bin/sh -c while true;d

root 1945 0 0 02:10 pts/0 00:00:00 /bin/bashroot 1976 1945 0 02:10 pts/0 00:00:00 ps -ef

root 1977 1 0 02:10 ? 00:00:00 /usr/bin/coreutils --co

#方式二

[root@bogon /]# 正在执行当前代码...

#docker exec :进入容器后开启一个新的终端,可以在里面操作(常用)

#docker attach :进入容器正在执行的终端,不会启动一个新的进程

docker cp 从容器内拷贝文件到主机上

docker cp 容器id:容器内路径 目的的主机路径

[root@bogon /home]# docker cp 容器id:/容器路径 /主机路径

#测试

[root@bogon /home]# docker cp 24fe5f78c8af:/home/test.java /home/

//先在容器内创建文件或目录

[root@24fe5f78c8af home]#touch test.java

[root@24fe5f78c8af home]# lstest.java

Ctrl+p+q

[root@bogon /home]# docker cp 24fe5f78c8af:/home/test.java /home/

[root@bogon /home]# ls

Sxr.java test.java www yacon

[root@bogon /home]# rm -rf Sxr.java

[root@bogon /home]# ls

test.java www yacon

#拷贝是一个手动过程未来使用

-v 数据卷的技术,可以实现数据同步

六、操作实例

1、docker部署nginx

2、docker部署tomcat

3、docker部署es+kibana

# es 暴露的端口很多

# es 非常的耗内存

# es的数据一般要放置到安全目录:挂载

# --net somenetwork 网络配置

# 启动ES 

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

#启动了 linux 就卡住了  docker stats 查看内存状态 


# 测试一下es是否启动成功

curl localhost:9200

# 赶紧关闭,增加内存的限制

docker stop 容器id

# 修改配置文件 -e 环境配置修改(使用-e限制,最高512M)

docker run -d --name elasticsearch03 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

# 查看使用情况

docker stats 容器id


你可能感兴趣的:(Docker笔记)