深夜博文,干活满满
Docker的安装
##这里我用的是阿里线网源,所以需要先搭建yum线网源仓库##
[root@localhost ~]# hostnamectl set-hostname docker
[root@localhost ~]# su
[root@docker ~]# cd /etc/yum.repos.d/
[root@docker yum.repos.d]# ls
backup local.repo
[root@docker yum.repos.d]# ls
backup local.repo
[root@docker yum.repos.d]# rm -rf local.repo
[root@docker yum.repos.d]# mv backup/* /etc/yum.repos.d/
[root@docker yum.repos.d]# ll
total 28
drwxr-xr-x. 2 root root 6 Nov 10 06:38 backup
-rw-r--r--. 1 root root 1664 Aug 30 2017 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Aug 30 2017 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Aug 30 2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 Aug 30 2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 Aug 30 2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Aug 30 2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3830 Aug 30 2017 CentOS-Vault.repo
[root@docker yum.repos.d]# yum clean all
[root@docker yum.repos.d]# yum makecache
##添加阿里docker线网源##
[root@docker yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##添加完成后会有一个docker-ce.repo##
[root@docker yum.repos.d]# ls
docker-ce.repo
[root@docker yum.repos.d]# yum install -y docker-ce
[root@docker yum.repos.d]# systemctl start docker.service
[root@docker yum.repos.d]# systemctl enable docker.service
- 镜像加速
为什么做镜像加速,不加速的话很卡很卡很卡!!!
##在阿里官网中,每个人都有自己的加速网址,可以去阿里云控制台查看##
[root@docker yum.repos.d]# cd ~
[root@docker ~]# mkdir -p /etc/docker
[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://ga12ck6j.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://ga1ock6j.mirror.aliyuncs.com"]
}
[root@docker ~]# cd /etc/docker/
[root@docker docker]# ls
daemon.json key.json
[root@docker docker]# systemctl daemon-reload
[root@docker docker]# systemctl restart docker
- 网络优化
[root@docker docker]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@docker docker]# sysctl -p
net.ipv4.ip_forward = 1
[root@docker docker]# systemctl restart network
[root@docker docker]# systemctl restart docker
- 安装完docker后,会自动分配一块网卡
[root@docker docker]# ifconfig
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:f0:05:36:99 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镜像的基础命令
1.查看镜像与版本信息
##因为我没有镜像所以无任何显示##
[root@docker docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
镜像名称 镜像标签 镜像ID 什么时候创建的 镜像大小
##查看docker的版本信息##
[root@docker 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 ##go语言写的,go语言会大火吧
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
2.查找指定镜像
##全球的Nginx镜像,按照热度排行###
[root@docker docker]# docker search Nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
Nginx Official build of Nginx. 13981 [OK]
jwilder/Nginx-proxy Automated Nginx reverse proxy for docker con… 1906 [OK]
richarvey/Nginx-PHP-fpm Container running Nginx + PHP-FPM capable of… 791 [OK]
linuxserver/Nginx An Nginx container, brought to you by LinuxS… 128
jc21/Nginx-proxy-manager Docker container for managing Nginx proxy ho… 109
tianGolo/Nginx-rtmp Docker image with Nginx using the Nginx-rtmp… 103 [OK]
bitnami/Nginx Bitnami Nginx Docker Image 90 [OK]
alfg/Nginx-rtmp Nginx, Nginx-rtmp-module and FFmpeg from sou… 80 [OK]
jlesage/Nginx-proxy-manager Docker container for Nginx Proxy Manager 66 [OK]
Nginxdemos/hello Nginx webserver that serves a simple page co… 63 [OK]
3.下载镜像 pull
##AUFS 若干层下载##
[root@docker docker]# docker pull Nginx
Using default tag: latest
latest: Pulling from library/Nginx
bb79b6b2107f: Pull complete
5a9f1c0027a7: Pull complete
b5c20b2b484f: Pull complete
166a2418f7e8: Pull complete
1966ea362d23: Pull complete
Digest: sha256:aeade65e99e5d5e7ce162833636f692354c227ff438556e5f3ed0335b7cc2f1b
Status: Downloaded newer image for Nginx:latest
docker.io/library/Nginx:latest
##查看镜像##
[root@docker docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Nginx latest c39a868aad02 4 days ago 133MB
##你的下载文件存放信息位置##
[root@docker overlay2]# vim /var/lib/docker/image/overlay2/repositories.json
{"Repositories":{"Nginx":
{"Nginx:latest":"sha256:c39a868aad02a383c7e490e0fc4a5b0217f667f2de764bc2755e315a5adf64a1"
,"Nginx@sha256:aeade65e99e5d5e7ce162833636f692354c227ff438556e5f3ed0335b7cc2f1b":"sha256:
c39a868aad02a383c7e490e0fc4a5b0217f667f2de764bc2755e315a5adf64a1"}}}
4.获取镜像信息 inspect
##获取镜像信息##
[root@docker overlay2]# docker inspect c39a868aad02
[
{
"Id": "sha256:c39a868aad02a383c7e490e0fc4a5b0217f667f2de764bc2755e315a5adf64a1",
"RepoTags": [
"Nginx:latest"
],
"RepoDigests": [
//.......
"AttachStdin": false,
"AttachStdout": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
//.......
- 这里插个小知识点,容器资源的格式几乎都是 json , yaml 两种
5.给镜像设置多标签 tag
[root@docker overlay2]# docker tag Nginx:latest Nginx:111
[root@docker overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Nginx 111 c39a868aad02 4 days ago 133MB
Nginx latest c39a868aad02 4 days ago 133MB
- 这个相当于起别名
##删除标签##
[root@docker overlay2]# docker rmi c39a868aad02
Error response from daemon: conflict: unable to delete c39a868aad02 (must be forced) -
image is referenced in multiple repositories
[root@docker overlay2]# docker rmi Nginx:111
Untagged: Nginx:111
6.导出与导入镜像
##导出镜像,-o表示导出+导出位置与名字+导出哪个镜像##
[root@docker opt]# docker save -o /opt/Nginx Nginx:latest
[root@docker opt]# ll -h
-rw------- 1 root root 131M Nov 10 07:42 Nginx
##这个时候我们删除原本镜像,并导回##
##查看镜像
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Nginx latest c39a868aad02 4 days ago 133MB
##删除镜像
[root@docker opt]# docker rmi Nginx:latest
Untagged: Nginx:latest
Untagged: Nginx@sha256:aeade65e99e5d5e7ce162833636f692354c227ff438556e5f3ed0335b7cc2f1b
Deleted: sha256:c39a868aad02a383c7e490e0fc4a5b0217f667f2de764bc2755e315a5adf64a1
Deleted: sha256:1af47386c12cb24b362bd785e71058ab675fbdcbda8e7a7ba0dd10c3cff75a2a
Deleted: sha256:25ee02f9e42f8cdca7ca8bc522cb69ac4a86a55401818a13c7a01e52a81894fe
Deleted: sha256:b1d2bc3292aa3d64794f99d2885d35b454993b4af24ad350a969d27925db7ebb
Deleted: sha256:4216e20d59f9fc90bccdd14493452532806d4803a25514366de2a9c5560624d0
Deleted: sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c
##再次查看镜像
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
##用load 导入镜像
[root@docker opt]# docker load < /opt/Nginx
d0fe97fa8b8c: Loading layer 72.49MB/72.49MB
2baf69a23d7a: Loading layer 64.54MB/64.54MB
2f57e21e4365: Loading layer 3.072kB/3.072kB
aee208b6ccfb: Loading layer 4.096kB/4.096kB
7b5417cae114: Loading layer 3.584kB/3.584kB
Loaded image: Nginx:latest
##查看镜像##
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Nginx latest c39a868aad02 4 days ago 133MB
Docker容器的基础命令
1.查看容器
[root@docker opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器的ID 使用的哪一个镜像创建的 环境 创建的时间 容器的状态 协议与端口
- -a :查看所有容器状态,不加的话查看的是已经运行的容器
2.创建容器
- 容器基于镜像创建,所以你需要先看有没有镜像
##可以看到这个时候的状态只是创建,你还需要去启动##
[root@docker opt]# docker create -it Nginx:latest /bin/bash
bb38787230cf40cb8c833f751667e129b97d6aeaf04983f8535fbb78d205f207
[root@docker opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb38787230cf Nginx:latest "/docker-entrypoint.…" 9 seconds ago Created hopeful_maxwell
- -i : 让容器的标准输入保持打开
- -t : 让docker分配一个伪终端
- /bin/bash : 需要的环境
3.容器的启动
[root@docker opt]# docker start bb38787230cf
bb38787230cf
[root@docker opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb38787230cf Nginx:latest "/docker-entrypoint.…" 2 minutes ago Up 6 seconds 80/tcp hopeful_maxwell
- 注意:这里并不意味着你就可以对外提供服务了,你还需要做NAT映射,为了保护容器的安全性
4.docker run
- docker run : 一条命令执行下载镜像,创建容器,开启容器
- docker run后面跟镜像,有直接使用,没有会直接去下载镜像,-c 后面跟要在容器种操作的指令
[root@docker opt]# docker run centos:7 /bin/bash -c ls /
Unable to find image 'centos:7' locally
7: Pulling from library/centos
75f829a71a1c: Pull complete
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
anaconda-post.log
bin
etc
home
//......省略
[root@docker opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955ec5648d68 centos:7 "/bin/bash -c ls /" 2 minutes ago Exited (0) 2 minutes ago awesome_hodgkin
bb38787230cf Nginx:latest "/docker-entrypoint.…" 16 minutes ago Up 14 minutes 80/tcp hopeful_maxwell
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Nginx latest c39a868aad02 4 days ago 133MB
centos 7 7e6257c9f8d8 3 months ago 203MB
5.容器的删除
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955ec5648d68 centos:7 "/bin/bash -c ls /" 11 hours ago Exited (0) 11 hours ago awesome_hodgkin
bb38787230cf Nginx:latest "/docker-entrypoint.…" 11 hours ago Up 3 seconds 80/tcp hopeful_maxwell
##先关闭,再删除##
[root@docker ~]# docker stop bb38787230cf
bb38787230cf
[root@docker ~]# docker rm bb38787230cf
bb38787230cf
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955ec5648d68 centos:7 "/bin/bash -c ls /" 11 hours ago Exited (0) 11 hours ago awesome_hodgkin
6.进入与退出容器
- 注意点:你进入的容器一定要是开启状态,否则无法进入
##首先开启一个容器##
[root@docker ~]# docker create -it Nginx:latest /bin/bash
546b2311fcff7ec4c6fa46c70bcd1c8bb4007577a99ebade3559fd3396bc47a6
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
546b2311fcff Nginx:latest "/docker-entrypoint.…" 6 seconds ago Created suspicIoUs_edison
955ec5648d68 centos:7 "/bin/bash -c ls /" 11 hours ago Exited (0) 11 hours ago awesome_hodgkin
[root@docker ~]# docker start 546b2311fcff
546b2311fcff
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
546b2311fcff Nginx:latest "/docker-entrypoint.…" 18 seconds ago Up 1 second 80/tcp suspicIoUs_edison
955ec5648d68 centos:7 "/bin/bash -c ls /" 11 hours ago Exited (0) 11 hours ago awesome_hodgkin
##进入Nginx容器##
[root@docker ~]# docker exec -it 546b2311fcff /bin/bash
root@546b2311fcff:/#
##退出容器
root@546b2311fcff:/# exit
exit
7.容器的导入导出
- 容器的导出(存储到指定目录+备注名)
[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
546b2311fcff Nginx:latest "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 80/tcp suspicIoUs_edison
955ec5648d68 centos:7 "/bin/bash -c ls /" 11 hours ago Exited (0) 11 hours ago awesome_hodgkin
[root@docker ~]# docker export 546b2311fcff > /opt/Nginx
[root@docker ~]# cd /opt/
[root@docker opt]# ll
total 134112
drwx--x--x 4 root root 28 Nov 10 06:43 containerd
-rw------- 1 root root 135339008 Nov 10 19:12 Nginx
这个时候我们去删除这个容器
##可以看到,正在运行的容器是不能删除的##
[root@docker opt]# docker rm 546b2311fcff
Error response from daemon: You cannot remove a running container 546b2311fcff7ec4c6fa46c70bcd1c8bb4007577a99ebade3559fd3396bc47a6. Stop the container before attempting removal or force remove
##只有停止状态或运行结束状态的容器才可以删除##
[root@docker opt]# docker stop 546b2311fcff
546b2311fcff
[root@docker opt]# docker rm 546b2311fcff
546b2311fcff
- 容器的导入
- 注意点:容器导入并不会创建容器,只会生成镜像
##这里用到cat与管道符号“|”将看到的内容递给dicker引入,并给个名字叫Nginx:web#
[root@docker opt]# cat /opt/Nginx | docker import - Nginx:web
sha256:d79ea958e6d3fa2d687bce6cd68bfed285600c6a52d31bb5f2c45400bc1cf06e
##可以看到并没有生成容器##
[root@docker opt]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955ec5648d68 centos:7 "/bin/bash -c ls /" 11 hours ago Exited (0) 11 hours ago awesome_hodgkin
##查看生成了镜像##
[root@docker opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Nginx web d79ea958e6d3 3 minutes ago 131MB
Nginx latest c39a868aad02 4 days ago 133MB
centos 7 7e6257c9f8d8 3 months ago 203MB
一些常识性问题
docker日志的查看
查看实时日志,不看历史:
docker -f --tail 1 container_id
查看后100行的日志:
docker logs --tail 100 container_id
查看30分钟之内日志
docker logs --since 30m container_id
查看指定日期之后的日志 (2019-03-25T13:00:00 到现在的日志)
docker logs -t --since="2019-03-25T13:00:00" container_id
查看指定时间后的日志,只显示最后100行:
docker logs -f -t --since="2019-03-25" --tail=100 container_id
查看指定时间段之内的日志, (–until 需要docker API 1.35 之上才支持)
docker logs -t --since="2019-03-25T13:00:00" --until="2019-03-25T14:00:00" container_id
docker logs -f --tail=100 container_id | grep 'xxx'