介绍
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可以移植的镜像中,然后发布到任意系统中,实现虚拟化;常用技术为Docker。
一个Docker完整的由四个部分组成:
1.Client客户端
2.Daemon守护进程
3.Image镜像
4.Container容器
Docker的运作利用的是宿主机的内核,不需要虚拟机系统,因此当创建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核,因此创建一个Docker容器的操作是秒级
安装
设置Docker仓库
[root@localhost ~]# sudo yum install yum-utils -y
设置稳定Docker仓库
[root@localhost ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #官方源仓库
Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
#部分仓库内容默认被禁用,可以使用下面的命令进行启用,如果不需要可以忽略此步骤
[root@localhost ~]# sudo yum-config-manager --enable docker-ce-nightly #开启夜间存储库
[root@localhost ~]# sudo yum-config-manager --enable docker-ce-test #开启测试通道
[root@localhost ~]# sudo yum-config-manager --disable docker-ce-nightly #关闭夜间存储库
安装最新版本Docker引擎和容器
[root@localhost ~]# sudo yum install -y docker-ce docker-ce-cli containerd.io
列出并排序可用的Docker版本,返回的列表取决于启用了哪些存储库,并且特定于系统版本;
[root@localhost ~]# yum list docker-ce --showduplicates | sort -r
Last metadata expiration check: 0:00:45 ago on Wed 03 Mar 2021 01:02:22 AM PST.
Installed Packages
docker-ce.x86_64 3:20.10.5-3.el8 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el8 @docker-ce-stable
启动Docker
[root@master ~]# systemctl start docker
查看Docker版本信息
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 20.10.5
API version: 1.41
Go version: go1.13.15
Git commit: 55c4c88
Built: Tue Mar 2 20:17:04 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
查看Docker详细信息
[root@localhost ~]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
本地镜像查看
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
镜像仓库源 镜像标签 镜像ID 创建时间 镜像大小
hello-world latest bf756fb1ae65 14 months ago 13.3kB
- -a:列出本地所有镜像,包含中间映像层;
- -q:仅显示镜像ID;
- –digests:显示镜像摘要信息;
- –no-trunc:显示完整的镜像信息;
镜像搜索
[root@localhost ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
名称 描述信息 点赞数量 官方推荐 是否自动安装
centos The official build of CentOS. 6439 [OK]
镜像下载
[root@localhost ~]# docker pull centos #爬取最新版本的centos镜像;
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
镜像删除
[root@localhost ~]# docker rmi xxxxx
容器命令
由于虚拟机存在部署慢等缺点,Linux开发了一种新的虚拟化技术:Linux 容器技术(Linux Containers),Linux容器部署模拟一个完整的操作系统,而是对进程进行隔离,有了容器就可以将软件运行所需的资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一套完整的操作系统,只需要对软件工作所需的库资源进行设置即可,系统因此而变得高效与轻量;
新建并启动容器
[rootlocalhost ~]# docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
–name:指定容器名称;
-d:后台运行容器,并返回容器ID;
-i:以交互模式运行容器;
-t:为容器分配一个伪输入终端;
-P:随机端口映射;
-p:指定端口映射;
端口映射有四种格式:
IP:HOST PORT:CONTAINER PORT
IP::CONTAINER PORT
HOST PORT:CONTAINER PORT
CONTAINER PORT
–restart=always:容器自动开启,当docker服务down或restart时,容器自动完成启动;
-h:设置容器主机名;
–dns 114.114.114.114:指定容器的DNS服务器;
–dns-search:DNS搜索设置;
–add-host [hostname:IP]:注入主机名称与IP地址的映射关系,此信息写入/etc/hosts文件内;
–rm:容器停止后自动删除;
[root@Redhat8 ~]# docker run -it --name centos-1 -d centos
abb0127a2e48f5db4c6f2ac591daa2c808f74d9cc6020c51b59357fdd74fe87f
[root@Redhat8 ~]# docker exec -it centos-1 /bin/bash #进入容器
[root@abb0127a2e48 /]# exit #退出容器
exit
列出所有运行的容器
[root@localhost ~]# docker run -it 300e315adb2f
[root@6b0a01d8c5e0 /]# #进入容器后,命令前缀回显容器ID
[root@localhost ~# docker ps #显示当前运行状态的容器;
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器ID 镜像 命令 创建时间 运行状态 端口 名称
6b0a01d8c5e0 300e315adb2f "/bin/bash" About a minute ago Up About a minute pensive_brattain
-a:列出当前所有运行过的容器,包含正在运行的容器;
-l:列出最近创建的容器;
-n:列出最近n个创建的容器;
-q:只显示容器ID;
–no-trunc:显示完整信息;
退出容器
[root@localhost ~]# docker run -it 300e315adb2f
[root@6b0a01d8c5e0 /]# exit #容器停止退出;
exit
[root@localhost ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
364722e51f07 hello-world "/hello" Less than a second ago Exited (0) Less than a second ago silly_shockley
Ctrl+P+Q #容器不停止退出;
[root@localhost ~]# docker run -it --name test_zxc centos
[root@7283bd6f0645 /]# (此处按下键盘Ctrl+P+Q)[root@localhost ~]#
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7283bd6f0645 centos "/bin/bash" 30 seconds ago Up 29 seconds test_zxc
启动/重启/停止/杀死/删除/重新登录 容器
root@localhost ~]# docker start/restart/stop/kill/rm/attach 364722e51f07 #多个容器ID使用空格间隔;
364722e51f07
[root@localhost ~]# docker inspect 364722e51f07 #查看容器基本信息
[root@localhost ~]# docker logs 364722e51f07 #查看容器日志;
[root@localhost ~]# docker stats 364722e51f07 #查看容器所占系统资源;
[root@localhost ~]# docker exec 364722e51f07 #容器执行命令
[root@localhost ~]# docker exec -it 364722e51f07 /bin/bash #登入容器的bash;
docker rm -f $(docker ps -aq) #删除所有的容器
其他常用命令
docker run -d 镜像名 #后台启动容器
docker logs -f -t --tail 容器,没有日志 //查看日志
#自己编写一段shell脚本:
[root@localhost ~]# docker run -d centos /bin/sh -c "while true;do echo lxz;sleep 1;done"
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1507f196475 centos "/bin/sh -c 'while t…" 2 seconds ago Up 1 second romantic_blackburn
#显示日志:
-tf //显示全部日志
--tail //显示日志条数
[root@localhost ~]# docker logs -tf --tail 10 e1507f196475
2022-02-10T11:31:05.082148069Z lxz
2022-02-10T11:31:06.084251808Z lxz
2022-02-10T11:31:07.088229879Z lxz
#查看容器中进程信息ps
[root@localhost~]# docker top e1507f19647
#查看镜像的元数据
docker inspect 容器id //显示如下
#进入当前正在运行的容器:
我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置。
docker exec -it 容器id /bin/bash
[root@localhost ~]# docker exec -it e1507f196475 /bin/bash
[root@e1507f196475 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@e1507f196475 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:28 ? 00:00:00 /bin/sh -c while true;do
root 857 0 0 11:42 pts/0 00:00:00 /bin/bash
root 975 1 0 11:43 ? 00:00:00 /usr/bin/coreutils --cor
root 976 857 0 11:43 pts/0 00:00:00 ps -ef
#从容器内拷贝文件到主机上
docker up 容器id:容器内路径 目的的主机路径
在当前主机下
[root@localhost home]# ls
1.txt admin lxz
[root@localhost home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b21b47312385 centos "/bin/bash" 40 seconds ago Up 39 seconds
#进入docker容器内部
[root@localhosthome]# docker attach b21b47312385
[root@b21b47312385 /]# cd /home
[root@b21b47312385 home]# ls
#在容器内新建一个文件
[root@b21b47312385 home]# touch lxz.java
[root@localhost home]# docker cp b21b47312385:/home/lxz.java /home
[root@localhost home]# ls
1.txt admin lxz lxz.java
练习:
Docker安装nginx
#1.搜索镜像(官方网站上更详细且有帮助文档) Docker search nginx
#2.下载镜像 Docker pull nginx
#3.运行测试
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 6 weeks ago 141MB
centos latest 5d0da3dc9764 4 months ago 231MB
[root@localhost ~]# docker run -d --name nginx01 -p 3344:80 nginx
fe646c842dc0cccf03cb807eb17fdb79f27eb7f3da3efd73e41b981f4f960076
-d 后台运行 --name 给容器命名 -p 端口映射
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe646c842dc0 nginx “/docker-entrypoint.…” 5 seconds ago Up 5 seconds 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
[root@localhost ~]# curl localhost:3344
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.