Docker入门

docker入门

docker的基本组成

docker分为

  • docker客户端 发送指令与docker主机交互(这点与redis类似);
  • docker服务主机 存放docker镜像及运行docker容器的核心引擎;
  • docker仓库 docker hub上存放所有的docker镜像。

image

镜像(image)

docker镜像相当于模板,通过镜像模板来创建容器服务;

tomcat镜像 -> run运行 -> tomcat01容器(提供服务);

通过镜像可以创建多个容器(最终项目程序运行在容器中)。

可以这样方便的理解

docker镜像 == Java类
docker容器 == Java对象

docker镜像 == VMware的系统镜像
docker容器 == VMware运行的虚拟机

容器(container)

独立运行一个或一组应用,是通过镜像创建的。

容器的基本操作:启动,停止,删除等。

仓库(repostory)

仓库是存放镜像的地方。

仓库分为公有仓库和私有仓库。

docker Hub(默认是国外的! 慢! 配置镜像加速!)

开始安装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 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 
yum makecache fast

# 4、安装docker社区版ce
yum install -y docker-ce docker-ce-cli containerd.io

# 5、启动docker
systemctl start docker

# 6、启动成功查看版本信息
docker version

# 7、hello world验证docker是否正确安装
docker run hello-world    

# 8、卸载docker
yum remove docker-ce docker-ce-cli containerd.io
# 删除docker相关资源
rm -rf /var/lib/docker

helloworld运行成功

image

配置镜像加速

# 加速地址 https://zxrycclq.mirror.aliyuncs.com ,加速地址需要登录阿里云管理后台去获得。
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://zxrycclq.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

docker常用命令

镜像命令

docker images 查看镜像
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
mysql         latest    c0cdc95609f1   3 weeks ago    556MB
hello-world   latest    d1165f221234   3 months ago   13.3kB
# REPOSITORY 镜像仓库
# TAG 镜像标签
# IMAGE ID 镜像id
# CREATED 创建时间
# SIZE 镜像大小
# -a 列出所有镜像
# -q 只显示镜像id
docker search 搜索镜像
[root@localhost ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10966     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4147      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   814                  [OK]
centos/mysql-57-centos7           MySQL 5.7 SQL database server                   88                   
docker pull 下载镜像
# 下载mysql,默认下载最新版本
[root@localhost ~]# docker pull mysql
Using default tag: latest 		# 不指定tag就下载最新版
latest: Pulling from library/mysql
69692152171a: Pull complete  	# 分层下载,联合文件系统
1651b0be3df3: Pull complete 
951da7386bc8: Pull complete 
0f86c95aa242: Pull complete 
37ba2d8bd4fe: Pull complete 
6d278bb05e94: Pull complete 
497efbd93a3e: Pull complete 
f7fddf10c2c2: Pull complete 
16415d159dfb: Pull complete 
0e530ffc6b73: Pull complete 
b0a4a1a77178: Pull complete 
cd90f92aa9ef: Pull complete 
Digest: sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969 # 签名
Status: Downloaded newer image for mysql:latest 
docker.io/library/mysql:latest 	# 源地址

# 指定版本下载
docker pull mysql:5.7
docker rmi 删除镜像
[root@localhost ~]# docker rmi -f hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:5122f6204b6a3596e048758cabba3c46b1c937a46b5be6225b835d091b90e46c
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726

# 删除指定 镜像id或镜像名称
docker rmi -f hello-world
# 删除多个 
docker rmi -f hello-world1 hello-world2 hello-world3
# 删除全部镜像 
docker rmi -f `docker images -qa`

容器命令

docker run 新建并运行容器
docker run [参数] image
# 参数
--name="容器名称" mysql01 mysql02用来区分容器
-d		后台运行
-it		交互方式运行,进入容器执行命令
-p		指定容器的端口
	-p ip:主机端口:容器端口
	-p 机端口:容器端口(常用)
	-p 容器端口
-P		随机指定端口

# 运行结果
[root@localhost ~]# docker run -it centos /bin/bash
[root@7ebc1e03168c /]# uname -a
Linux 7ebc1e03168c 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@7ebc1e03168c /]# hostname
7ebc1e03168c
[root@7ebc1e03168c /]# date
Tue Jun  8 15:15:47 UTC 2021
[root@7ebc1e03168c /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@7ebc1e03168c /]# ll
bash: ll: command not found

# 停止容器并退出
exit
# 只退出,容器继续后台运行
ctrl + P + Q
# 进入容器
docker attach 容器id
docker ps 查看容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
9c99c802e6be   centos    "/bin/bash"   35 seconds ago   Up 34 seconds             centos01
# 列出正在运行中的容器
# -a 列出所有容器及运行过的历史容器
# -q 显示容器id
# -n=1 列出最近几个运行的容器
docker rm 删除容器
# 删除指定id容器
 docker rm 容器id
# 删除全部容器
docker rm `docker ps -qa`
docker 启动停止进入容器
# 进入容器
docker attach 容器id
# 启动容器
docker start 容器id
# 停止容器
docker stop 容器id
# 重启容器
docker restart 容器id
# 杀掉容器
docker kill 容器id

其他常用命令

docker logs 查看容器日志
# 看全部
docker logs -tf 容器id
# 看指定行数
docker logs -tf --tail 10 容器id
docker top 查看容器进程
docker top 容器id
docker inspect 查看容器元数据
docker inspect 容器id
docker exec 进入容器
# 进入容器打开一个新终端(常用)
docker exec -it 容器id /bin/bash 

# 进入原来容器
docker attach 容器id
docker cp 拷贝数据
# 从容器中拷贝数据到宿主机
docker cp 容器id:/home/test.txt /home

练习

  1. 下载一个nginx
# 1.搜索镜像
docker search nginx
# 2.下载镜像
docker pull nginx:1.20
# 3.运行,宿主机端口8888映射到容器中的nginx端口80,因此访问宿主机ip:8888就访问到nginx了。
docker run -d --name nginx_01 -p 8888:80 nginx:1.20
# 4.测试
curl localhost:8888
  1. 下载tomcat
docker run -d --name tomcat_01 -p 8880:8080 tomcat:9.0
  1. 下载elastic search
# elasticsearch启动后占用内存比较大,加上-e参数限制内存。
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch

# docker stats 查看你容器资源使用情况
docker stats 
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O        PIDS
f0d42dd2c990   elasticsearch02   0.15%     249.4MiB / 1.777GiB   13.71%    656B / 0B   149MB / 55.3kB   38

commit镜像

作用:创建自定义的镜像

image

例如:
我在docker hub上pull一个tomcat:9.0镜像,此镜像中webapps目录下是没有应用的,把webapps.dict目录下的应用拷贝到webapps目录下就可以访问应用了,此时把做了修改的容器再打包成一个镜像;当下次用这个镜像启动容器,或把这个镜像拿给别人使用时webapps目录下就直接有应用了。

测试:

# docker commit -a="作者" -m="备注" 容器id 自定义镜像tag
docker commit -a="heyuhao" -m="add app" 44a4bf8efb0f mytomcat:1.0

# 测试结果
[root@localhost ~]# docker commit -a="heyuhao" -m="add app" 44a4bf8efb0f mytomcat:1.0
sha256:782476f352b9472afc79f86fb09abf61d36a0220b25d1779824d97dbf264d74b
[root@localhost ~]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
mytomcat        1.0       782476f352b9   12 seconds ago   672MB
nginx           1.20      993ef3592f66   2 weeks ago      133MB
tomcat          9.0       c43a65faae57   3 weeks ago      667MB
centos          latest    300e315adb2f   6 months ago     209MB
elasticsearch   latest    5acf0e8da90b   2 years ago      486MB
posted @ 2021-06-09 00:39  浩瀚的雨  阅读(116)  评论(0)    收藏  举报