Docker[容器] 基础到实现

介绍

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可以移植的镜像中,然后发布到任意系统中,实现虚拟化;常用技术为Docker。
一个Docker完整的由四个部分组成:
1.Client客户端
2.Daemon守护进程
3.Image镜像
4.Container容器
Docker[容器] 基础到实现
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[容器] 基础到实现

#进入当前正在运行的容器:
我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置。
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!

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.

上一篇:CentOS更新VMware Tools及设置共享文件夹


下一篇:What are good ways to prevent SQL injection? [duplicate]