芯が強い人になるESTJ-A

# Docker--2021

IT開発 Tags: 无标签 阅读: 167

<2014.9.6>
update
COPY . .
Host file system
Image/container file system

截屏2021-07-28 16.03.05.jpg

截屏2021-07-28 16.05.51.jpg

学习路径

Docker概述,Docker安装,Docker命令,镜像命令,容器命令,操作命令。。。
Docker镜像,
容器数据卷
DockerFile
Docker网络原理
IDEA整合Docker
Docker Compose
Docker Swarm
CI/CD jekins

截屏2021-08-08 08.42.37.jpg

DevOps(开发和运维)

Docker一键安装,马上部署,立刻运行

Docker基本组成

截屏2021-08-08 08.47.59.jpg
截屏2021-08-08 08.49.37.jpg

镜像Image

例子:tomcat镜像-》run-〉tomcat01容器提供服务

容器container

容器,启动,停止,删除,基本命令。
容器=小型的linux系统

仓库Repository

存放,镜像的地方。
共有仓库,私有仓库

安装docker

官方安装手册一步一步:link

第一步卸载旧的版本,安装gcc环境

#第一步:
yum -y install gcc
yum -y install gcc-c++
#第二步,卸载old版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

需要的安装包

##第三步:安装需要的软件包
sudo yum install -y yum-utils

设置镜像的仓库

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
##阿里云地址:自己选择,第四步
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引

##更新yum软件包索引
yum makecache fast

##安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io

##启动Docker
systemctl start docker

##测试是否成功
docker version

###最后一步:安装docker加速器
sudu mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":["https://qiyb9988.mirror.aliyunsc.com"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

第五步:启动docker,测试helloworld命令

sudo systemctl start docker

检测docker是否安装成功

docker version
截屏2021-08-08 10.10.50.jpg

sudo docker run hello-world
截屏2021-08-08 10.13.02.jpg

第六步:查看一下hello-world这个镜像

docker images

截屏2021-08-08 10.15.04.jpg

第七步:

万一,你不需要docker了,怎么做??

##移除镜像
yum remove docker-ce docker-ce-cli containerd.io

##卸载目录
sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd

回顾hello-world流程

截屏2021-08-08 14.26.30.jpg

docker底层概念

截屏2021-08-08 14.38.58.jpg

docker为什么比VM快??

截屏2021-08-08 14.43.29.jpg

docker的常用命令

帮助命令--帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

学习:镜像命令+容器命令,有了镜像,才可以创建容器。

docker verison

docker info #显示docker的系统信息

docker 命令 --help #万能命令

docker search +软件名称

截屏2021-08-08 15.00.23.jpg

官方文档:link

docker镜像命令

docker images

截屏2021-08-08 14.54.06.jpg
截屏2021-08-08 14.56.20.jpg

docker pull下载镜像
默认下载最新版本的,也可以自己指定版本,见下方tag

docker pull 镜像名 [:tag]

latest: Pulling from library/mysql
33847f680f63: Pull complete 
5cb67864e624: Pull complete 
1a2b594783f5: Pull complete 
b30e406dd925: Pull complete 
48901e306e4c: Pull complete 
603d2b7147fd: Pull complete 
802aa684c1c4: Pull complete 
715d3c143a06: Pull complete 
6978e1b7a511: Pull complete 
f0d78b0ac1be: Pull complete 
35a94d251ed1: Pull complete 
36f75719b1a9: Pull complete 
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

截屏2021-08-08 15.06.05.jpg

指定版本docker pull mysql:5.7

docker pull mysql:5.7

docker images;

截屏2021-08-08 15.10.03.jpg

docker rmi -f+镜像ID,删除镜像

rm=remove
i=images

docker容器命令

说明:我们有了镜像,才可以创建容器

docker pull centos

新建容器,并启动

docker run [可选参数] image
#参数说明
--name="Name"容器名字 tomcat01 tomcat02 用来区分容器
-d 已后台方式运行
-i 使用交互方式运行,进入容器,查看内容
-t 
-it 使用交互方式运行,进入容器,查看内容
-p 指定容器的端口,port
  -p 主机端口:容器端口
  -p 容器端口

-P 大P,随机指定端口

截屏2021-08-08 15.20.17.jpg
截屏2021-08-08 15.20.29.jpg

退出容器,exit

查看正在运行的容器docker,

docker ps [OPTIONS]

docker ps 目前运行的容器
docker ps -a曾经运行的容器
docker ps -n=? 显示最近创建的容器
docker ps -q只显示容器的编号ID

退出容器

exit #直接容器停止+退出
Ctrl+P+Q #容器不停止+退出

删除容器

docker rm 容器id #删除指定容器id,正在运行的容器,需要rm-f的方式删除
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有容器

启动和停止容器的操作!!

docker start 容器id #启动
docker restart 容器id #重新启动
docker stop 容器id #停止
docker kill 容器id #强行kill

docker常用的其他命令!!!重要

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

我们通常,容器都是使用后台运行的方式,需要进入容器,修改一些配置。
方法一:docker exec -it 容器id bashShell

docker exec -it ID /bin/bash

方法二:docker attach 容器id

docker attach ID

从容器内拷贝文件到主机上(文件在docker里面,把docker里面的文件,cp到主机路径上)

docker cp 容器id:容器内Path路径 目的的主机路径。
docker copy简写cp

截屏2021-08-12 12.12.07.jpg

docker

attach #shell下attach连接执行运行镜像
build #通过Dockerfile定制镜像
commit #提交当前容器为新的镜像
cp #从容器中拷贝指定文件到目录主机中
create #创建一个新的容器,同时run,但是不启动容器
diff #查看docker容器的变化
events #从docker服务获取容器的事件
exec #运行命令
export #导出容器内容,作为一个tar归档文件
import 导入
history #展示一个镜像的历史
images #列出系统当前的镜像
info #显示系统相关信息
inspect #查看容器详细信息
kill #kill指定的docker容器
load#从一个tar包中加载一个镜像
login #注册,登陆一个docker微服务
logout #从当前docker registry退出
logs #输出当前容器的日志
port #查看映射端口对应的容器内端口号
pause #暂停容器
ps#列出容器列表
pull#从docker镜像服务源拉取指定的镜像
push#推送指定镜像或者仓库镜像到docker仓库服务器
restart #重启运行的容器
rm #移除一个/多个容器
rmi#强制删除镜像
save#保存一个镜像为tar包
search#在docker hub中搜索镜像
start#启动容器
stop#停止容器
tag#给容器打标签,方便管理
top#查看容器中运行的进行信息
unpause#取消暂停的容器
version#查看docker的版本号
wait# 截取容器停止时,退出的状态

案例1:

docker安装nginx
第一步:search镜像,自己去docker pub查一下,有版本号写版本号,无版本号用最新的
第二步:下载镜像pull
第三步:运行测试
docker images;
-d后台运行
--name,2个-,否则报错,给容器起名字
-p 宿主机端口号:容器内部端口号
docker run -d --name nginx01 -p 3344:80 nginx;

截屏2021-08-12 13.11.46.jpg

截屏2021-08-12 13.15.13.jpg
截屏2021-08-12 13.19.16.jpg

进入容器docker exec -it 容器名 /bin/bash

[root@iZuf6f34ah9elznexcxb5kZ ~]# docker exec -it nginx01 /bin/bash
root@78d75c4c81f5:/# where is nginx
bash: where: command not found
root@78d75c4c81f5:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@78d75c4c81f5:/# 

作业2:docker安装一个tomcat

学了命令,不敲=不会。

官方使用

docker run -it --rm tomcat:9.0
用完就删,测试可以,一般不这么用

限制elasticSearch内存大小

>elasticsearch限制大小启动;
 docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

我们自己,

docker pull tomcat:9.0

elasticsearch限制大小启动;

[root@iZuf6f34ah9elznexcxb5kZ ~]# docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

docker stats查看状态

CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O   BLOCK I/O        PIDS
bf6c5eb79f7e   elasticsearch02   0.32%     371.5MiB / 1.795GiB   20.22%    0B / 0B   21.6MB / 729kB   42
^C
[root@iZuf6f34ah9elznexcxb5kZ ~]# curl localhost:9200
{
  "name" : "bf6c5eb79f7e",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "rSbGDujmQCeAYw-JZDyUgQ",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
[root@iZuf6f34ah9elznexcxb5kZ ~]# 

截屏2021-08-12 14.38.18.jpg

可视化

portainer(先用这个)

Docker图形话界面管理工具
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

截图信息

截屏2021-08-12 14.47.25.jpg
截屏2021-08-12 14.53.44.jpg

Rancher(CI/CD)

commit镜像

docker commit提交容器成为一个新的副本
原理和git命令类似
docker commit -m="提交的描述信息message" -a="作者author" 容器id 目标镜像名:[TAG]

学习方式说明:理解概念,一定要实践,最后实践+理论结合,一次搞定。