目录
一、docker的安装
安装依赖环境
[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
依赖包说明
yum-utils 是yum配置管理工具,提供yum-config-manager这条指令
device mapper 存储驱动程序需要device-mapper-persistent-data和 lvm2,它是内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,简单讲是为了让docker-ce能够平稳运行
获取阿里云镜像源,这里就用到了yum-config-manager工具,从官网添加镜像源
[root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看yum仓库里的源
[root@server1 docker]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ll
总用量 36
drwxr-xr-x. 2 root root 6 11月 25 14:13 backup
-rw-r--r--. 1 root root 1664 8月 30 2017 CentOS-Base.repo
#基础的yum源,没有的话,安装docker引擎时会报错
-rw-r--r--. 1 root root 1309 8月 30 2017 CentOS-CR.repo
-rw-r--r--. 1 root root 649 8月 30 2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 8月 30 2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 8月 30 2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 8月 30 2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3830 8月 30 2017 CentOS-Vault.repo
-rw-r--r--. 1 root root 2640 3月 16 2020 docker-ce.repo #阿里的docker引擎镜像源
-rw-r--r--. 1 root root 228 8月 10 21:36 local.repo
安装docker-ce
#安装前最好yum clean all ,yum makecache
[root@server1 yum.repos.d]# yum -y install docker-ce
关闭防火墙和核心防护
[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# setenforce 0
#临时的
开启docker服务
[root@server1 ~]# systemctl start docker.service
[root@server1 ~]# systemctl enable docker.service
二、镜像加速
在利用阿里的源拉取镜像之前,需要做镜像加速,否则拉取镜像会很慢。
每个人都能通过注册阿里云官方账号,获取镜像加速。
获取方法:
登录阿里云,并注册登录自己的账号,点击控制台
查看产品与服务
进入容器镜像服务,找到自己的加速地址,导入镜像加速,root用户登录就不需要sudo执行
[root@server1 ~]# mkdir -p /etc/docker
[root@server1 ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://******.mirror.aliyuncs.com"]
> }
> EOF
重启服务
[root@server1 ~]# systemctl daemon-reload #重载进程
[root@server1 ~]# systemctl restart docker
做网络加速,开启路由转发
[root@server1 ~]# vi /etc/sysctl.conf
[root@server1 ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@server1 ~]# systemctl restart docker
三、基本管理命令——镜像
3.1 查看docker版本信息
[root@server1 docker]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15 #docker是go语言开发的
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
3.2 搜索镜像
docker search 镜像名
[root@server1 ~]# docker search nginx #搜索的是阿里公有仓库中的镜像,按热度排序
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 14063 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1912 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 795 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 131
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 115
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 105 [OK]
bitnami/nginx Bitnami nginx Docker
3.3 下载拉取镜像
docker pull 镜像名
[root@server1 docker]# docker pull nginx
Using default tag: latest #默认标签名为latest
latest: Pulling from library/nginx
852e50cd189d: Pull complete #是分布式的存储,下载时也是分层的获取镜像
571d7e852307: Pull complete
addb10abd9cb: Pull complete
d20aa7ccdb77: Pull complete
8b03f1e11359: Pull complete
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
3.4 查看本地镜像
[root@server1 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest bc9a0695f571 6 hours ago 133MB
tomcat latest e0bd8b34b4ea 6 days ago 649MB
3.5 获取镜像的详细信息
docker inspect 镜像ID
[root@server1 docker]# docker inspect bc9a0695f571 #镜像ID
[
{
"Id": "sha256:bc9a0695f5712dcaaa09a5adc415a3936ccba13fc2587dfd76b1b8aeea3f221c",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3"
],
省略部分信息
3.6 给镜像打标签,相当于起别名
docker tag 原镜像:标签 新镜像:标签
[root@server1 docker]# docker tag nginx:latest nginx:web
#再查看镜像
[root@server1 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest bc9a0695f571 7 hours ago 133MB
nginx web bc9a0695f571 7 hours ago 133MB
#生成新的镜像信息,但镜像ID没变,是同一个镜像,只是标签不同
tomcat latest e0bd8b34b4ea 6 days ago 649MB
3.7 删除镜像
- 一个镜像有多个标签时,无法用镜像id删除镜像,必须先删除标签到只剩一个,再删除镜像
- 如果已经生成容器,必须先删除容器,才能删除镜像
docker rmi 镜像ID
[root@server1 docker]# docker rmi bc9a0695f571
Error response from daemon: conflict: unable to delete bc9a0695f571 (must be forced) - image is referenced in multiple repositories
[root@server1 docker]# docker rmi nginx:web #删除标签
Untagged: nginx:web
[root@server1 docker]# docker rmi bc9a0695f571
Untagged: nginx:latest
Untagged: nginx@sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Deleted: sha256:bc9a0695f5712dcaaa09a5adc415a3936ccba13fc2587dfd76b1b8aeea3f221c
Deleted: sha256:a6862ade3b91fdde2aa8a3d77fdcc95b1eb6c606be079c11b7f97f249d0e731d
Deleted: sha256:32bcbe3740b68d0625744e774b404140366c0c4a2b2eadf32280d66ba001b4fb
Deleted: sha256:2dc5e43f496e41a18c016904b6665454a53be22eb4dcc1b468d864b4e2d1f311
Deleted: sha256:5fe6a7c579cd9fbcfa604810974c4c0c16893f4c40bc801545607ebd0accea74
Deleted: sha256:f5600c6330da7bb112776ba067a32a9c20842d6ecc8ee3289f1a713b644092f8
3.8 存出镜像到本地
存出的是已经拉取的镜像
[root@server1 docker]# docker save -o /opt/tomcat tomcat:latest #将Tomcat镜像存到本地的/opt目录下命名为Tomcat
3.9 载入镜像
可以通过存到本地的镜像包,进行镜像载入到docker
删除tomcat镜像,利用本地载入镜像。
[root@server1 docker]# docker rmi e0bd8b34b4ea
[root@server1 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@server1 docker]# docker load < /opt/tomcat
114ca5b7280f: Loading layer 119.2MB/119.2MB
f3be340a54b9: Loading layer 17.1MB/17.1MB
475b4eb79695: Loading layer 17.85MB/17.85MB
712264374d24: Loading layer 150MB/150MB
4b9227ba273c: Loading layer 11.52MB/11.52MB
39341dafb261: Loading layer 3.584kB/3.584kB
94982bbe98d5: Loading layer 324.2MB/324.2MB
438ec47051c4: Loading layer 2.56kB/2.56kB
a84354b89db3: Loading layer 20.8MB/20.8MB
3be17d77a93a: Loading layer 2.048kB/2.048kB
Loaded image: tomcat:latest
[root@server1 docker]# docker images #载入成功
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest e0bd8b34b4ea 6 days ago 649MB
3.10 上传镜像到仓库(公有)
改标签
docker tag nginx:latest abner/nginx:web //用户名/仓库名:镜像名
登陆
docker login
Username: docker
password:
Email: xxx@xxx.com
上传
docker push abner/nginx:web
四、基本管理命令——容器
4.1 制作容器
有了镜像之后,就可以制作容器运行镜像
docker create [选项] 镜像运行的程序 /bin/bash
[root@server1 docker]# docker create -it tomcat:latest /bin/bash
5d5a89b11c563b81970fff5d71193f57ea771db9dfa1ffb6b8344115bee044c4
-i 让容器的标准输入保持打开
-t 让Docker分配一个伪终端
4.2 查看容器状态(ID)
docker ps -a #-a查看所有
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d5a89b11c56 tomcat:latest "/bin/bash" 49 seconds ago Created trusting_pare
4.3 启动容器
docker start 容器id
[root@server1 docker]# docker start 5d5a89b11c56
5d5a89b11c56
#查看状态
[root@server1 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d5a89b11c56 tomcat:latest "/bin/bash" 2 minutes ago Up 44 seconds 8080/tcp trusting_pare
#状态为up
4.4 进入容器
[root@server1 docker]# docker exec -it 容器id /bin/bash
4.5 删除容器
必须先停止容器
[root@server1 docker]# docker stop ef27a446e3c9 #容器id
ef27a446e3c9
[root@server1 docker]# docker rm ef27a446e3c9 #容器id
ef27a446e3c9
批量删除容器
[root@server1 ~]# docker ps -a | awk '{print "docker rm "$1}' |bash
Error: No such container: CONTAINER
cc985082a4bd
ca77bdbcbe08
1afa0ca0d52f
Error response from daemon: You cannot remove a running container 6e1db4de053b497009e60f1f0d0894aa9660e2685971ce16c25d32aeb7b332a6. Stop the container before attempting removal or force remove
5d5a89b11c56
[root@server1 ~]# docker ps -a #up状态未被删除
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e1db4de053b centos:7 "/bin/bash" 27 minutes ago Up 27 minutes quizzical_lumiere
4.6 三合一,docker run
拉取镜像、制作容器和启动容器可以用一条命令完成,即三合一,容器平稳运行三步骤:下载镜像、创建容器、启动容器。
[root@server1 docker]# docker run -itd centos:7 /bin/bash #进程放在后台运行
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
#可以发现一条命令实现了生成镜像并创建容器,启动容器成功
[root@server1 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 8652b9f0cb4c 11 days ago 204MB
[root@server1 docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e1db4de053b centos:7 "/bin/bash" About a minute ago Up About a minute quizzical_lumiere
启动执行命令,查看系统根目录
[root@server1 docker]# docker run centos:7 /bin/bash -c ls / #-c, 执行命令
anaconda-post.log
bin
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
#进入容器,查看容器IP
[root@server1 docker]# docker exec -it 6e1db4de053b /bin/bash
[root@6e1db4de053b /]# yum -y install net-tools #安装网络工具
[root@6e1db4de053b /]# ifconfig #查看网卡信息
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.3 netmask 255.255.0.0 broadcast 172.17.255.255
#172.17.0.3是容器IP,用于与外界通信,网桥是172.17.0.1,启动docker后,虚拟机节点生成的
ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet)
RX packets 6225 bytes 11272335 (10.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3549 bytes 194944 (190.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1 (Local Loopback)
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)
4.7 返回码
强行关闭容器,返回码为非0
[root@server1 ~]# docker run centos:7 /usr/bin/bash -c "while true;do echo hello;done" #持续在后台运行
[root@server1 ~]# docker stop cc985082a4bd
cc985082a4bd
[root@server1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc985082a4bd centos:7 "/usr/bin/bash -c 'w…" About a minute ago Exited (137) 9 seconds ago jovial_mclaren
执行完成结束,或为执行成功,返回状态码0
[root@server1 docker]# docker run centos:7 /bin/bash -c ls /
[root@server1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1afa0ca0d52f centos:7 "/bin/bash -c ls /" 8 minutes ago Exited (0) 8 minutes ago exciting_satoshi
4.8 容器导出
[root@server1 ~]# docker export 6e1db4de053b > /opt/cent_c #容器id > 需要导出的目录,和保存名
[root@server1 ~]# ll /opt
总用量 1559008
-rw-r--r--. 1 root root 274841600 11月 25 16:33 cent_c #生成的容器包
drwx--x--x. 4 root root 28 11月 25 14:19 containerd
-rw-------. 1 root root 660788224 11月 25 15:31 nginx
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
-rw-------. 1 root root 660788224 11月 25 15:32 tomcat
4.9 容器导入(只会生成镜像,不会创建容器)
先删除原来的容器,镜像,再导入
[root@server1 ~]# docker stop 6e1db4de053b
6e1db4de053b #停止容器
[root@server1 ~]# docker rm 6e1db4de053b
6e1db4de053b #删除容器
[root@server1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@server1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest e0bd8b34b4ea 6 days ago 649MB
centos 7 8652b9f0cb4c 11 days ago 204MB
[root@server1 ~]# docker rmi 8652b9f0cb4c #删除镜像
Untagged: centos:7
Untagged: centos@sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Deleted: sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf
Deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02
[root@server1 ~]# cat /opt/cent_c | docker import - centos:7 #导入容器的镜像
sha256:4f280dc8c8070c8c7384b2871ae50f10cdf86e8aff486f9ff7ebdb77e5334d33
[root@server1 ~]# docker images #查看镜像生成
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 4f280dc8c807 4 seconds ago 267MB
tomcat latest e0bd8b34b4ea 6 days ago 649MB