前言
docker容器简介
前言
-
Docker是什么
是一种轻量级的“虚拟机”
在Linux容器里运行应用的开源工具 -
容器与虚拟机的区别
- 虚拟机需要安装操作系统 但是容器不需要 ,容器其中只包含了核心,
- 容器启动时间很短 虚拟机则需要几十秒甚至数分钟
- 虚拟机比容器更安全
- 容器可以灵活迁移 虚拟机不行
- 容器之间是互相独立的
- Docker的使用场景
打包应用程序简化部署
可脱离底层硬件任意迁移
例:服务器从腾讯云迁移到阿里云
Docker的核心概念及安装方式
- 镜像
一个面向Docker容器引擎的只读模板 - 容器
从镜像创建的运行实例 - 仓库
集中保存镜像的地方 - CentOS安装Docker的两种方式
●使用CURL获得Docker的安装脚本进行安装
●使用YUM仓库来安装Docker
部署Docker
首先安装配置yum阿里源的所需要的yum管理控制和内核框架
然后再安装docker-ce
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y install docker-ce
(如果在这步出现报错多数是因为更改了yum仓库配置文件 需要还原centos系统默认的yum仓库配置文件 恢复后使用yum clean all清理缓存)
systemctl stop firewalld
setenforce 0
为了保证docker 公用库的镜像下载速度和可靠性
为docker配置阿里云的镜像加速
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://h7******.mirror.aliyuncs.com"] #这次的加速地址为个人地址 每个阿里云账户都有一个 可以自行查看自己的阿里云镜像加速地址是什么 再在此处添加
}
EOF
systemctl daemon-reload
systemctl restart docker #开启服务
service network restart #重启网络服务
ifconfig #查看docker0的端口是否正常起来了
显示:
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:cd:e3:16:8c txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker基础操作
查看docker版本号
[root@server1 docker] docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
搜索公有库的容器镜像
[root@server1 docker] docker search apache
NAME(名字) DESCRIPTION(备注) STARS(好评数) OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 3263 [OK]
tomcat Apache Tomcat is an open source implementati… 2883 [OK]
cassandra Apache Cassandra is an open-source distribut… 1213 [OK]
maven Apache Maven is a software project managemen… 1119 [OK]
zookeeper Apache ZooKeeper is an open-source server wh… 960 [OK]
solr Solr is the popular, blazing-fast, open sour… 800 [OK]
apache/nifi Unofficial convenience binaries and Docker i… 192 [OK]
获取容器镜像
[root@server1 docker] docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
756975cb9c7e: Pull complete
d77915b4e630: Pull complete
5f37a0a41b6b: Pull complete
96b2c1e36db5: Pull complete
27a2d52b526e: Pull complete
a867dba77389: Pull complete
0939c055fb79: Pull complete
0b0694ce0ae2: Pull complete
81a5f8099e05: Pull complete
c3d7917d545e: Pull complete
Digest: sha256:a319b10d8729817c7ce0bcc2343a6f97711c7870395019340d96b6aafd6ccbea
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
查看docker本地容器镜像
[root@server1 docker] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest e0bd8b34b4ea 6 days ago 649MB
删除本地容器镜像列表(id)
[root@server1 docker] docker rmi e0bd8b34b4ea
Untagged: tomcat:latest
Untagged: tomcat@sha256:a319b10d8729817c7ce0bcc2343a6f97711c7870395019340d96b6aafd6ccbea
Deleted: sha256:e0bd8b34b4ea904874e55eae50e8987815030d140f9773a4b61759f4f85bf38d
......
删除操作需要注意的是 如果 一个镜像拥有2个标签 呢么使用id删除的时候会报错 这个时候可以使用名字来删除单个 或者使用-f删除所有这个id的镜像
查看镜像详细信息
[root@server1 docker] docker inspect bc9a0695f571
[
{
"Id": "sha256:bc9a0695f5712dcaaa09a5adc415a3936ccba13fc2587dfd76b1b8aeea3f221c",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3"
.....
为镜像添加标签
[root@server1 docker] docker tag nginx:latest nginx:web_service
[root@server1 docker] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest bc9a0695f571 8 hours ago 133MB
nginx web_service bc9a0695f571 8 hours ago 133MB
导出镜像到当前目录下
[root@server1 docker] docker save -o nginx nginx:web_service
[root@server1 docker] ll
总用量 133892
-rw-r--r--. 1 root root 67 11月 25 14:57 daemon.json
-rw-------. 1 root root 244 11月 25 14:41 key.json
-rw-------. 1 root root 137097216 11月 25 16:11 nginx
载入镜像
[root@server1 docker] docker load < nginx
f5600c6330da: Loading layer 72.52MB/72.52MB
7ccabd267c9f: Loading layer 64.54MB/64.54MB
850c2400ea4d: Loading layer 3.072kB/3.072kB
f790aed835ee: Loading layer 4.096kB/4.096kB
7e914612e366: Loading layer 3.584kB/3.584kB
Loaded image: nginx:web_service
Docker容器操作
创建容器
docker create [选项]镜像运行的程序
●-i让容器的标准输入保持打开
●-t让Docker分配一个伪终端查看容器运行状态
docker ps [选项]
●-a列出所有的容器,包括未运行的容器
创建容器
[root@server1 docker] docker create -it nginx:web_service /bin/bash
7f0baa17731e87893fcc054b373d02527571740acd09fa3dda7edc5812b19258
查看已创建的容器
[root@server1 docker] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f0baa17731e nginx:web_service "/docker-entrypoint.…" 2 minutes ago Created laughing_mccarthy
启动容器
[root@server1 docker] docker start 7f0baa17731e
7f0baa17731e
[root@server1 docker] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f0baa17731e nginx:web_service "/docker-entrypoint.…" 7 minutes ago Up 12 seconds 80/tcp laughing_mccarthy
e92123bdf6de nginx:web_service "/docker-entrypoint.…" 11 minutes ago Created nervous_clarke
使用run直接下载镜像》创建容器》启动容器
[root@server1 docker] docker run -itd nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
1872c2a473f795749067d2e35b6115772b794d6e157c9cdf508ca5c51d90683e
[root@server1 docker] docker images
REPOSITORY TAG IMAGE ID CREATED ZE
nginx latest bc9a0695f571 8 hours ago 3MB
nginx web_service bc9a0695f571 8 hours ago 3MB
[root@server1 docker] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1872c2a473f7 nginx "/docker-entrypoint.…" 46 seconds ago Up 45 seconds 80/tcp vigorous_wilbur
7f0baa17731e nginx:web_service "/docker-entrypoint.…" 10 minutes ago Up 3 minutes 80/tcp laughing_mccarthy
e92123bdf6de nginx:web_service "/docker-entrypoint.…" 15 minutes ago Created nervous_clarke
启动执行命令后关闭容器
先创建并开启一个容器
docker pull paigeeworld/centos7
docker create -it paigeeworld/centos7 /bin/bash
docker start b835619285ae
然后再执行下面的命令
[root@server1 docker] docker run paigeeworld/centos7 /usr/bin/bash -c ls /
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
终止容器运行
[root@server1 docker] docker stop 1872c2a473f7
1872c2a473f7
[root@server1 docker] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d86ca9d8fb9 paigeeworld/centos7 "/usr/bin/bash -c ls…" 4 minutes ago Exited (0) 4 minutes ago compassionate_kepler
b835619285ae paigeeworld/centos7 "/bin/bash" 6 minutes ago Up 4 minutes naughty_beaver
1872c2a473f7 nginx "/docker-entrypoint.…" 22 minutes ago Exited (0) 7 seconds ago vigorous_wilbur
7f0baa17731e nginx:web_service "/docker-entrypoint.…" 32 minutes ago Up 25 minutes 80/tcp laughing_mccarthy
e92123bdf6de nginx:web_service "/docker-entrypoint.…" 37 minutes ago Created nervous_clarke
注:正常关闭容器时 返回的值是0 非0的返回值 都是异常关闭
进入容器
[root@server1 docker] docker exec -it b835619285ae /bin/bash
bash-4.2 ll
bash: ll: command not found
bash-4.2 cd
bash-4.2 ls -Th
ls: invalid tab size: h
bash-4.2 ls
bin dev home lib64 media opt root sbin sys usr
boot etc lib lost+found mnt proc run srv tmp var
退出 exit
容器导出到当前目录下
[root@server1 docker] docker export 9d86ca9d8fb9 > centos_7
[root@server1 docker] ll
总用量 486932
-rw-r--r--. 1 root root 361509376 11月 25 17:10 centos_7
-rw-r--r--. 1 root root 67 11月 25 14:57 daemon.json
-rw-------. 1 root root 244 11月 25 14:41 key.json
-rw-------. 1 root root 137097216 11月 25 16:11 nginx
导入容器
[root@server1 docker] cat centos_7 | docker import - centos7-1
sha256:5f47bc6ebb6ff1f85f3e80db491083511b4925cf2c5821e61521a6a88c49f47d
[root@server1 docker] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7-1 latest 5f47bc6ebb6f 9 seconds ago 355MB
nginx latest bc9a0695f571 9 hours ago 133MB
nginx web_service bc9a0695f571 9 hours ago 133MB
paigeeworld/centos7 latest 4cbe7aa905e7 6 years ago 382MB
删除容器
[root@server1 docker] docker rm e92123bdf6de
e92123bdf6de
批量删除容器
[root@server1 docker] docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
9d86ca9d8fb9
Error response from daemon: You cannot remove a running container b835619285ae3d30113937d443e9a0fc75f707ba46e5442716ff94bc379cd5bf. Stop the container before attempting removal or force remove #如果其中有up状态的容器 呢么会报这条错误 并且只删除处于关闭状态的容器 up状态的不会关闭
1872c2a473f7
7f0baa17731e
[root@server1 docker] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b835619285ae paigeeworld/centos7 "/bin/bash" 27 minutes ago Up 25 minutes naughty_beaver
dorker容器中的ip分配
一般docker服务启动后新建的docker网卡的ip是172.17.0.1 这个虚拟网卡是所有容器的网关
后续启动的容器 ip会从172.17.0.2开始递增
创建并启动一个centos系统的容器后 使用ifconfig命令查看 容器的centos7并没有net-tools 要安装才能使用命令
bash-4.2 yum -y install net-tools 安装net工具
bash-4.2 ifconfig 查看容器分配的ip
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.4 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:ac:11:00:04 txqueuelen 0 (Ethernet)
RX packets 3713 bytes 19394794 (18.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3624 bytes 203690 (198.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0