栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker学习笔记(一)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker学习笔记(一)

一、安装

官方文档:https://docs.docker.com/

  1. 查看操作系统版本
cat /etc/redhat-release 
  1. 卸载旧版本
[root@VM-8-2-centos local]# yum remove docker 
>                   docker-client 
>                   docker-client-latest 
>                   docker-common 
>                   docker-latest 
>                   docker-latest-logrotate 
>                   docker-logrotate 
>                   docker-engine
#系统里没有所以没有匹配到,无伤大雅
Loaded plugins: fastestmirror, langpacks
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-engine
No Packages marked for removal

  1. 设置镜像
[root@VM-8-2-centos etc]# yum install -y yum-utils
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
epel                                                                                                                                                                | 4.7 kB  00:00:00     
extras                                                                                                                                                              | 2.9 kB  00:00:00     
os                                                                                                                                                                  | 3.6 kB  00:00:00     
updates                                                                                                                                                             | 2.9 kB  00:00:00     
(1/2): epel/7/x86_64/updateinfo                                                                                                                                     | 1.0 MB  00:00:00     
(2/2): epel/7/x86_64/primary_db                                                                                                                                     | 7.0 MB  00:00:00     
Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version
Nothing to do
[root@VM-8-2-centos etc]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

  1. 更新一下软件索引
yum makecache fast
  1. 安装docker, -ce 社区版本
yum -y install docker-ce docker-ce-cli containerd.io
  1. 启动docker
systemctl start docker
  1. 查看版本,运行hello-world
docker version
[root@VM-8-2-centos local]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

  1. 查看本地镜像
[root@VM-8-2-centos local]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   7 months ago   13.3kB

  1. 镜像加速,腾讯云不支持个人版,阿里云可以试一下
二、名词解释
  1. 镜像(image):一个只读模板,可以创建出很多容器,相当于Java的类模板 class,一个类可以创建很多实例对象
  2. 容器(container):由镜像实例化来的独立运行的一个或一组应用,可以把它看成是一个微型的linux环境,可以被启动、开始、停止、删除,容器之间是相互隔离的。
  3. 仓库(repository):存放镜像文件的场所
三、原理
  • docker是一个Client-Server结构的系统
  • docker运行在远程主机上,用户可以通过socket连接从客户端访问
  • 守护进程接受客户端发送的命令并管理运行在远程主机的容器
四、基本命令

官方文档:https://docs.docker.com/engine/reference

1. 帮助命令
  • 查看版本、查看基本信息、查看帮助信息
docker version
docker info
docker 命令 --help
2. 镜像命令
  • docker images :查看所有镜像
[root@VM-8-2-centos docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   7 months ago   13.3kB

### --all , -a 查看所有镜像
### --quiet , -q 只显示镜像ID
  • docker search [OPTIONS] :搜索Docker Hub中的镜像
[root@VM-8-2-centos docker]# docker search mysql
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                            MySQL is a widely used, open-source relation…   12468     [OK]       
mariadb                          MariaDB Server is a high performing open sou…   4802      [OK]       
mysql/mysql-server               Optimized MySQL Server Docker images. Create…   922                  [OK]
percona                          Percona Server is a fork of the MySQL relati…   575       [OK]       
phpmyadmin                       phpMyAdmin - A web interface for MySQL and M…   513       [OK]       
mysql/mysql-cluster              Experimental MySQL Cluster Docker images. Cr…   93                   
centos/mysql-57-centos7          MySQL 5.7 SQL database server                   93                   
bitnami/mysql                    Bitnami MySQL Docker Image                      69                   [OK]
ubuntu/mysql                     MySQL open source fast, stable, multi-thread…   31                   
circleci/mysql                   MySQL is a widely used, open-source relation…   25                   
mysql/mysql-router               MySQL Router provides transparent routing be…   23                   
google/mysql                     MySQL server for Google Compute Engine          21                   [OK]
####--filter , -f  加上过滤条件
[root@VM-8-2-centos docker]# docker search mysql -f=stars=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12468     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4802      [OK] 
  • docker pull NAME:TAG:下载镜像
[root@VM-8-2-centos docker]# docker pull mysql
Using default tag: latest ### 没写tag默认下载最新的
latest: Pulling from library/mysql
4be315f6562f: Pull complete  ### 分层下载,docker images的核心
96e2eb237a1b: Pull complete 
8aa3ac85066b: Pull complete 
ac7e524f6c89: Pull complete 
f6a88631064f: Pull complete 
15bb3ec3ff50: Pull complete 
ae65dc337dcb: Pull complete 
654aa78d12d6: Pull complete 
6dd1a07a253d: Pull complete 
a32905dc9e58: Pull complete 
152d41026e44: Pull complete 
42e0f73ebe32: Pull complete 
Digest: sha256:fc77d54cacef90ad3d75964837fad0f2a9a368b69e7d799665a3f4e90e600c2d  ### 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest ###真实的下载地址
### 带tag 得是在Docker Hub中存在的版本
docker pull mysql:debian

  • docker rmi IMAGEID :删除镜像,删除多个就用空格间隔开,-f 强制删除
[root@VM-8-2-centos docker]# docker rmi f2ad9f23df82
Untagged: mysql:latest
Untagged: mysql@sha256:fc77d54cacef90ad3d75964837fad0f2a9a368b69e7d799665a3f4e90e600c2d
Deleted: sha256:f2ad9f23df82a3e5efabd1574b862a94c0657c73a6179efec07d5cf9ae5a307f
Deleted: sha256:1842e304c411836d9e690b82bb7f5b84c543d752b708ac0ddc0f7a85afc39144
Deleted: sha256:d9b83ca1899c00aac07632965971e9b85f702edb1bdf4f04b796a6d07fd15e2f
Deleted: sha256:ddbfed04654bf4c03b7e1036c1a99130cbcdbeaafc65684c6eaf50824fb0c110
Deleted: sha256:8ae2def9b47405bfdeff47f5246ce2b38c568303156200229cc69af84b0438b3
Deleted: sha256:7c52f329d0b5360c594770d0afc87d6902a33b453f12c129b52f6287f81ae111
Deleted: sha256:625e297c59e84d9cb5ae0dcd69714dcc7f3c823c281cce1616374232057c8fa9
Deleted: sha256:52994d077831159b79c473125916eb6874cebf38493e3046abe80935e181d8af
Deleted: sha256:9550bb960b1438abbdc93a0a5518055f4a455bbd65491e53fa795960ddf518a5
Deleted: sha256:d3dee54c8b55b10f9fe4100dd1fa6e59f98dbfbf84b5757f518d874f57acd1ec
Deleted: sha256:49ff85d13492ccda474015e5e7101f35e8cee2f4b23d2385195d8a897b4be097
Deleted: sha256:7310671d54d99fba70b7191bca28f8e9a4b5438c4b012a2ceca11cae17d3177b
Deleted: sha256:0ad3ddf4a4ce0fc9d65021897541c99e5497a11ced2419016147267df61732d3

### 删除查询出来的所有镜像
docker rmi -f $(docker images -aq)
3. 容器命令
  • 有镜像才能创建容器实例,这里使用centos镜像来做测试
docker pull centos
  • docker run :创建并运行一个容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
	--name  指定容器实例的名字
	-d      后台运行模式并打印容器ID
	-it     使用交互方式运行,可以进入容器查看内容
	-p      指定容器端口 
			-p 8080 这里的端口是容器暴露给主机的端口而不是给外部访问的端口
			-p 80:8080 制动容器端口为8080并和主机端口80绑定
			-p 不写就会使用随机端口
	
### -it 启动并进入容器 后面接控制台的类型bash 或者 shell,使用exit可以退出容器
[root@VM-8-2-centos redis]# docker run -it centos /bin/bash
[root@e07a1dd6520e /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@e07a1dd6520e /]# exit
exit
  • docker ps:查看正在运行的容器,-a 查看历史运行记录,-n=? 显示最近创建的容器后接个数,-q 只显示容器id
[root@VM-8-2-centos redis]# docker ps -a
CONTAINER ID   IMAGE         COMMAND       CREATED         STATUS                     PORTS     NAMES
e07a1dd6520e   centos        "/bin/bash"   5 minutes ago   Exited (0) 2 minutes ago             eager_brahmagupta
e8b8175e6fbd   hello-world   "/hello"      23 hours ago    Exited (0) 23 hours ago              heuristic_jepsen
3f4ca360f955   hello-world   "/hello"      23 hours ago    Exited (0) 23 hours ago              romantic_carver
  • 进入容器后退出容器的几种方式
exit 退出并停止运行容器
Ctrl + P + Q 退出但不停止运行
  • docker rm CONTAINERID :删除容器,-f 强制删除,
### 不能删除正在运行的容器,要删除正在运行的容器得使用 -f 强制删除
[root@VM-8-2-centos redis]# docker rm 3f4ca360f955
3f4ca360f955
docker rm -f $(docker ps -aq) ###强制删除所有容器
docker ps -a -q|xargs docker rm ###删除所有容器
  • 启动和停止容器的操作
docker start [CONTAINER ID]    启动一个或多个容器
docker restart [CONTAINER ID]  重启一个或多个容器
docker stop [CONTAINER ID]     停止一个或多个容器
docker kill [CONTAINER ID]     强制停止一个或多个容器
[root@VM-8-2-centos redis]# docker start e07a1dd6520e
e07a1dd6520e
[root@VM-8-2-centos redis]# docker restart e07a1dd6520e
e07a1dd6520e
[root@VM-8-2-centos redis]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
e07a1dd6520e   centos    "/bin/bash"   53 minutes ago   Up 6 seconds             eager_brahmagupta
[root@VM-8-2-centos redis]# docker stop e07a1dd6520e
e07a1dd6520e
[root@VM-8-2-centos redis]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

4. 常用命令及可能遇到的问题
  • 后台启动容器,通过ps命令可以发现没有容器正在运行,这是因为docker容器后台运行就必须有一个前台进程在工作,否则docker发现没有应用在工作就会自动停止
[root@VM-8-2-centos redis]# docker run -d centos
749f0f4c9f0f70962c3c6c0d08e9407a8b649fde38d1b104952a88d4b6b2100a
[root@VM-8-2-centos redis]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-8-2-centos redis]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                      PORTS     NAMES
749f0f4c9f0f   centos    "/bin/bash"   14 seconds ago   Exited (0) 14 seconds ago             pensive_agnesi

  • docker logs:查看容器日志
docker logs -f -t --tail 10  749f0f4c9f0f
-f          跟踪日志输出,日志会刷新
-t          显示时间戳
--tail num  从日志末尾开始显示指定的行数,后面跟要输出的行数
  • docker top [CONTAINER ID] :查看容器内进程ID
[root@VM-8-2-centos ~]# docker top c045b9e9936a
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                9644                9624                0                   16:36               ?                   00:00:00            /bin/sh -c while true;do echo ambition; sleep 1;done
root                9717                9644                0                   16:36               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

  • docker inspect:查看容器内部信息
  • docker exec:进入一个正在运行的容器
[root@VM-8-2-centos ~]# docker exec -it c045b9e9936a /bin/bash
[root@c045b9e9936a /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@c045b9e9936a /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:36 ?        00:00:00 /bin/sh -c while true;do echo ambition; sleep 1;done
root      1131     0  0 08:54 pts/0    00:00:00 /bin/bash
root      1153     1  0 08:54 ?        00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root      1154  1131  0 08:54 pts/0    00:00:00 ps -ef

  • docker attach:进入容器正在运行的终端,将本地标准输入、输出和错误流附加到正在运行的容器,和上面的区别就是上面开启了一个新的终端窗口,而这个不会
  • docker cp :从容器中复制文件到主机
[root@VM-8-2-centos ~]# docker run -it centos /bin/bash
[root@6146c407e9da /]# cd home/
[root@6146c407e9da home]# ls
[root@6146c407e9da home]# touch test.java
[root@6146c407e9da home]# exit
exit
[root@VM-8-2-centos ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS                     PORTS     NAMES
6146c407e9da   centos    "/bin/bash"   6 minutes ago   Exited (0) 9 seconds ago             tender_aryabhata
[root@VM-8-2-centos ~]# docker cp 6146c407e9da:/home/test.java /home
[root@VM-8-2-centos ~]# cd /home
[root@VM-8-2-centos home]# ls
lighthouse  test.java
  • 用完即删的启动命令 –rm,容器停止后自动删除容器,通常用于测试
docker run -it --rm tomcat:9.0
5. 练习
  • 测试安装tomcat镜像并启动,启动成功后访问发现404,进入容器查看webapps文件夹发现是空的,将webapps.dist文件拷贝到webapps能正常访问tomcat首页
[root@VM-8-2-centos ~]# docker start 8d349043b9b5
8d349043b9b5
[root@VM-8-2-centos ~]# docker ps
CONTAINER ID   IMAGE        COMMAND             CREATED         STATUS         PORTS                                   NAMES
8d349043b9b5   tomcat:9.0   "catalina.sh run"   2 minutes ago   Up 4 seconds   0.0.0.0:80->8080/tcp, :::80->8080/tcp   tomcat01
[root@VM-8-2-centos ~]# docker exec -it 8d349043b9b5 /bin/bash
root@8d349043b9b5:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@8d349043b9b5:/usr/local/tomcat# cd webapps.dist
root@8d349043b9b5:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@8d349043b9b5:/usr/local/tomcat/webapps.dist# cd ../
root@8d349043b9b5:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@8d349043b9b5:/usr/local/tomcat# cd webapps
root@8d349043b9b5:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager
  • 安装es+kibana
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.3
[root@VM-8-2-centos ~]# curl localhost:9200
{
  "name" : "74df5327328b",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "bXvaefrnTGSchL0NXhaJvw",
  "version" : {
    "number" : "7.17.3",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "5ad023604c8d7416c9eb6c0eadb62b14e766caff",
    "build_date" : "2022-04-19T08:11:19.070913226Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

### 限制使用的内存大小
[root@VM-8-2-centos ~]# docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx500m" elasticsearch:7.17.3
6. 可视化面板
  • 安装portainer/portainer-ce,这里选择连接本地做测试,启动成功后访问页面 IP:8088,首次登录需要设置管理员密码
[root@VM-8-2-centos ~]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer-ce
五、Docker镜像 1. docker镜像原理

docker镜像由多个只读文件系统叠加组成,当使用者启动镜像时,docker会在文件系统的栈顶新增一个读写层,用户在容器中做的操作都在读写层中记录,所以镜像是可以供多个容器复用的。

2. commit镜像(在容器中修改后提交作为新的镜像)
[root@VM-8-2-centos ~]# docker commit -a="ambition" -m="add webapps" 8d349043b9b5 tomcat02:1.0
sha256:e87c8c1b0b0f7ecf848021258f9ab6a77478a0d950c85a5a7d91c9b4cc8e7073
[root@VM-8-2-centos ~]# docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
tomcat02                 1.0       e87c8c1b0b0f   4 seconds ago   685MB
portainer/portainer-ce   latest    a4844528206d   6 days ago      277MB
tomcat                   9.0       6705ea17274a   2 weeks ago     680MB
nginx                    latest    fa5269854a5e   3 weeks ago     142MB
elasticsearch            7.17.3    3c91aa69ae06   3 weeks ago     613MB
hello-world              latest    feb5d9fea6a5   7 months ago    13.3kB
centos                   latest    5d0da3dc9764   7 months ago    231MB

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880553.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号