文章目录
一、概述
1. Docker能解决的问题
统一开发和运维的环境
开发和测试的日常对话:我在我电脑上可以运行~!
一款产品:开发到部署,是两个环境 存在环境的问题?
开发在Windows 发布在Linux…(环境差别很大,而且安装配置麻烦,深有体会~!)
2. Docker思想
- 集装箱
- 隔离机制
3. Docker为什么这么火?(作用)
- 十分轻巧(相比于虚拟机)
他不是一台完整的带操作系统的电脑,只是最核心的环境,其他系统和外部硬件共用宿主的 - 应用更快速的交付和部署
传统:一堆帮助文档,配置环境,安装程序
Docker:打包(带应用的运行环境)镜像发布、测试,一键运行 - 更便捷的升级和扩容
使用了Docker之后,部署应用和搭积木一样
项目打包为一个镜像,要扩展服务 只需在服务器上运行即可(服务器A、服务器B … …) - 更简单的系统运维
使用了Docker之后,我们开发、测试、运维的环境是高度一致的 - 更高效的计算机资源利用
Docker是内核级别的虚拟机,可以在一个物理机上运行很多的容器实例!
服务器的性能可以被压榨到极致!
4. 底层
基于Go语言开发的
5. 官网和文档
6. 基本组成(图解)
7. 核心概念(名词)
- 镜像(image)
Docker镜像好比一个模板,通过这个模板可以创建容器服务。
Tomcat镜像 --> run --> Tomcat01容器(提供服务)
通过这个模板可以创建多个容器。
Tomcat镜像 --> run --> Tomcat02容器(提供服务)
-
容器(container)
Docker利用容器技术,独立运行一个或一组应用,这些应用是通过镜像来创建的 -
仓库(repository)
- 公有仓库 - 默认仓库是国外的
我们可以 配置 阿里云的Docker仓库(镜像加速) - 私有仓库
- 公有仓库 - 默认仓库是国外的
10. Docker工作流程
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。
通过Socket从客户端访问!
DockerServer接收到DockerClient的指令,就会执行这个命令~!
二、安装
1. 环境准备
uname -r
[root@sunmmerwind ~]# uname -r
4.18.0-240.15.1.el8_3.x86_64
cat /etc/os-release
[root@sunmmerwind ~]# uname -r
4.18.0-240.15.1.el8_3.x86_64
[root@sunmmerwind ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
2. 安装步骤
1、卸载旧版本
# 直接复制粘贴
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、需要的安装包
[root@sunmmerwind ~]# yum install -y yum-utils
3、设置镜像的仓库
- 国外镜像仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 阿里镜像仓库(使用这个)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装Docker引擎
[root@sunmmerwind ~]# yum install docker-ce docker-ce-cli containerd.io
ce:社区版
ee:企业版(收费)
5、启动Docker
[root@sunmmerwind ~]# systemctl start docker
6、测试是否启动
[root@sunmmerwind ~]# docker version
Client: Docker Engine - Community
Version: 20.10.6
API version: 1.41
Go version: go1.13.15
Git commit: 370c289
Built: Fri Apr 9 22:44:36 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.6
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8728dd2
Built: Fri Apr 9 22:43:02 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
7、运行 hello-world 映像来验证是否正确安装了Docker Engine
[root@sunmmerwind ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:f2266cbfc127c960fd30e76b7c792dc23b588c0db76233517e1891a4e357d519
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
8、查看运行的镜像
[root@sunmmerwind ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 6 weeks ago 13.3kB
[root@sunmmerwind ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58715163d8e3 hello-world "/hello" About a minute ago Exited (0) About a minute ago wonderful_hellman
9、阿里云服务器配置镜像加速器
1)登陆阿里云
2)在弹性计算里面 找到 容器镜像服务
3)免费开通
4)执行下面命令就可以用了
# 创建目录
sudo mkdir -p /etc/docker
# 设置阿里云镜像服务 带最后的EOF
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://noi9j7o6.mirror.aliyuncs.com"]
}
EOF
# 重新加载
sudo systemctl daemon-reload
# 重启Docker
sudo systemctl restart docker
三、卸载
1. 卸载Docker Engine,CLI和Containerd软件包
yum remove docker-ce docker-ce-cli containerd.io
2. 主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷
rm -rf /var/lib/docker
四、命令
1. 帮助命令
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:28 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:28 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
[root@iZbf2jzc4i64zvZ ~]# ^C
[root@iZbf2jzc4i64zvZ ~]# clear
[root@iZbf2jzc4i64zvZ ~]# docker info
Client:
Debug Mode: false
Server:
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 19.03.12
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-1127.10.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.795GiB
Name: iZbf2jzc4i64zvZ
ID: ML25:C7CS:I7GJ:DLJ4:E6ZC:YWOW:VXII:46RU:GUSJ:622O:ZDOG:TXN3
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://noi9j7o6.mirror.aliyuncs.com/
Live Restore Enabled: false
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
[root@iZbf2jzc4i64zvZ ~]# docker --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST
env var and default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
Run 'docker COMMAND --help' for more information on a command.
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
2. 镜像命令
镜像类似 我们所说的系统盘 O(∩_∩)O哈哈~
[root@sunmmerwind ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 6 weeks ago 13.3kB
搜索命令
[root@sunmmerwind ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10768 [OK]
mariadb MariaDB Server is a high performing open sou… 4056 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 792 [OK]
percona Percona Server is a fork of the MySQL relati… 533 [OK]
过滤搜索
[root@sunmmerwind ~]# docker search mysql --filter=stars=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10768 [OK]
[root@sunmmerwind ~]# docker pull mysql
Using default tag: latest #默认下载最新版
latest: Pulling from library/mysql #下载路径
6ec8c9369e08: Pull complete #Linux中的联合文件系统(下载过的 不用重复下载了)
177e5de89054: Pull complete
ab6ccb86eb40: Pull complete
e1ee78841235: Pull complete
09cd86ccee56: Pull complete
78bea0594a44: Pull complete
caf5f529ae89: Pull complete
cf0fc09f046d: Pull complete
4ccd5b05a8f6: Pull complete
76d29d8de5d4: Pull complete
8077a91f5d16: Pull complete
922753e827ec: Pull complete
Digest: sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14acc #签名
Status: Downloaded newer image for mysql:latest #状态:Downloaded 已下载
docker.io/library/mysql:latest #真实下载地址
【所以docker pull mysql 等价于 docker pull docker.io/library/mysql:latest】
删除全部镜像:docker rmi -f $(docker images -aq) #$(删除的参数)
#因为容器中只有一个了
[root@iZbf2jzc4i64zvZ ~]# docker rmi -f $(docker images -aq)
Untagged: hello-world:latest
Untagged: hello-world@sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
根据镜像ID删除镜像: docker rmi -f 镜像ID
[root@iZbf2jzc4i64zvZ ~]# docker rmi -f 8679ced16d20
Untagged: mysql:5.7
Untagged: mysql@sha256:97869b42772dac5b767f4e4692434fbd5e6b86bcb8695d4feafb52b59f
Deleted: sha256:8679ced16d206961b35686895b06cfafefde87ef02b518dfc2133081ebf47cda
Deleted: sha256:355f87dc5125a32cc35898a4dde17fb067585bc0d86704b5a467c0ccc0eea484
Deleted: sha256:8299d5c38042216210125535adb2600e46268a0e2b9ec799d12ea5b770236e79
Deleted: sha256:07311a303b2c7cf2ac6992aaf68e12326fe7255985166939cbab7d18b10e0f47
Deleted: sha256:306c9bc1ce2997d000bb6f1ea4108420d9752df93ce39164b7a2f876b954afc4
一次删除多个镜像:docker rmi -f 镜像ID 镜像ID 镜像ID 镜像ID
不做示例了 ID中间加空格就行了~!
根据镜像的名字删除:docker rmi -f 镜像名字
[root@iZbf2jzc4i64zvZ ~]# docker rmi -f mysql
Untagged: mysql:latest
Untagged: mysql@sha256:fb6a6a26111ba75f9e8487db639bc5721d4431beba4cd668a4e922b8f8b14
Deleted: sha256:e3fcc9e1cc046c92cfcea0d66cdb00fcb7747e87dde96dfc958bd80be37af117
Deleted: sha256:7a1c5c1a40dad78bacb211ec3d7918acdd78a76185fd33a167260c3e51e97fa4
Deleted: sha256:abb5f0f890ba2f327d30b5ca1bbc35584bc6357c8d6f4bdc2e4637cce2ea9a35
Deleted: sha256:919c56fc8230b0ddf8580e0a58d34ae1c5e48069d9b48cc41ae7a1cae82bb60e
Deleted: sha256:962d6891622cf4a7e8932f6c76b2c2f3ab9cecb8aad71d55adacc2aece6b0181
Deleted: sha256:ab26019b1328bff5ea5132b5e3f52b9fd3808e734f1a39141fb9e5da561200e2
Deleted: sha256:06bd523b11319c8177ab2003cb31b296cea22b0201bf8ae987ac300118a0654f
Deleted: sha256:a8681d5c66889e97303be147d30eb8ec4b0bd5bc0e2c774b4d94f52ec23c4649
Deleted: sha256:c28ab987d3964139dcd3852e1c10ef0a425d2705c71a3b68b411460279d8535d
Deleted: sha256:c0fc32d1072662668dd59842d893e5ee125c1958931ae84630132b7bb6c09198
Deleted: sha256:da0ebf91b8bc2d545dbe73cbf9b7c7b25df71033f5057133a445e9c33a36ec7d
Deleted: sha256:483d8f607b803b5e3d3f97adbad3b0e692670f223b2529ecae5d04888c29ad5d
Deleted: sha256:95ef25a3204339de1edf47feaa00f60b5ac157a498964790c58c921494ce7ffd
3. 容器命令
容器类似我们用系统盘 做的新系统~
docker run [可选参数] image
参数说明:–name=“Name” 设置容器名字
-d 后台运行方式
-it 使用交互方式运行,进入容器查看内容
-p(小屁) 指定容器的端口(-p 8080:8080)
-p (ip:主机端口:容器端口)
-p (主机端口:容器端口)【常用】
-p (容器端口)
容器端口 (不写-p)
-P 随机指定端口
# centos 是 下载的一个镜像
[root@iZbf2jzc4i64zvZ ~]# docker run -it centos /bin/bash
# 换成镜像ID了
[root@755709dbc6b0 /]#
# centos基础版本,很多命令不完善!ll命令就没有~~~
[root@755709dbc6b0 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
后台启动命令 及 坑~~!!
#命令:docker run -d 镜像名
[root@iZbf2jzc4i64zvZ ~]# docker run -d centos /bin/bash
27be24a0c1dda2815bc2dec8bb6efc09f81c2b6ca7a9b0380a11e6d6ef315a5b
#问题docker ps,发现centos停止了~
[root@iZbf2jzc4i64zvZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iZbf2jzc4i64zvZ ~]#
#常见的坑:docker容器使用后台运行,就必须要有一个前台的进程,docker发现没有应用,就会自动停止
#还有nginx,容器后台启动后,发现自己没有提供服务,就会立刻停止
- 容器停止 并 退出容器
exit
- 容器不停止 退出容器
Ctrl+P+Q(顺序不能错)
参数说明:
# 不加任何参数,只显示当前正在运行的容器
-a # 查看当前正在运行的容器 + 历史运行过的程序
-n=? # 显示最近创建的容器(?代表显示几个)
-q # 显示容器的编号(CONTAINER ID)
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
755709dbc6b0 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago pedantic_mccarthy
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
755709dbc6b0 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago pedantic_mccarthy
6b5fb686c28d bf756fb1ae65 "/hello" 35 hours ago Exited (0) 35 hours ago silly_stonebraker
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -n=3
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
755709dbc6b0 centos "/bin/bash" 3 hours ago Exited (0) 3 hours ago pedantic_mccarthy
6b5fb686c28d bf756fb1ae65 "/hello" 35 hours ago Exited (0) 35 hours ago silly_stonebraker
只显示容器编号ID
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -q
755709dbc6b0
6b5fb686c28d
[root@iZbf2jzc4i64zvZ ~]# docker ps -aq
755709dbc6b0
6b5fb686c28d
- docker rm 容器ID
[root@iZbf2jzc4i64zvZ ~]# docker rm 6b5fb686c28d
6b5fb686c28d
- 删除指定的容器,无论是否正在运行 -f
[root@iZbf2jzc4i64zvZ ~]# docker rm 87e99063bbbe
Error response from daemon: You cannot remove a running container 87e99063bbbe.
(在试图移动或强行移动之前,请停止容器)
Stop the container before attempting removal or force remove
[root@iZbf2jzc4i64zvZ ~]# docker rm -f 87e99063bbbe
87e99063bbbe
- 删除所有的容器
[root@iZbf2jzc4i64zvZ ~]# docker rm $(docker ps -aq)
de8748047921
755709dbc6b0
- 删除所有的容器(可通过管道符选择删除 xargs)
[root@iZbf2jzc4i64zvZ ~]# docker ps -a -q|xargs docker rm
e5ad028987ce
- 启动
docker start 容器ID
- 重启
docker restart 容器ID
- 停止
docker stop 容器ID
- 杀掉
docker kill 容器ID
参数解释:
-c “” # 引号里面是一段shell脚本
echo # 打印
这就解释了为什么这次后台运行没停止
-tf
–tail 10 显示日志条数(如果不加–tail会全部显示)
[root@iZbf2jzc4i64zvZ ~]# docker run -d centos /bin/bash -c "while true;do echo SummerWind;sleep 1;done" # 这段shell脚本,意思是循环打印SummerWind
c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c
[root@iZbf2jzc4i64zvZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5672e9223d2 centos "/bin/bash -c 'while猞" 4 seconds ago Up 3 seconds recursing_cartwright
[root@iZbf2jzc4i64zvZ ~]# docker logs -tf --tail 10 c5672e9223d2
2020-07-24T07:15:25.177771117Z SummerWind
2020-07-24T07:15:26.180032231Z SummerWind
2020-07-24T07:15:27.181983254Z SummerWind
2020-07-24T07:15:28.184071541Z SummerWind
2020-07-24T07:15:29.186062819Z SummerWind
docker top 容器ID(这要是正在运行的容器)
[root@iZbf2jzc4i64zvZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b3c259fa54b6 centos "/bin/bash -c 'while猞" About a minute ago Up About a minute hardcore_benz
[root@iZbf2jzc4i64zvZ ~]# docker top b3c259fa54b6
UID PID PPID C STIME TTY TIME CMD
root 17631 17615 0 15:22 ? 00:00:00 /bin/bash -c while true;do echo SummerWind;sleep 1;done
root 17742 17631 0 15:23 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
[root@iZbf2jzc4i64zvZ ~]# docker inspect c5672e9223d2
[
{
#容器ID(这是完整的 显示的只是前12位 ~)
"Id": "c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c",
"Created": "2020-07-24T07:14:37.838659993Z",
"Path": "/bin/bash",
"Args": [
"-c",
"while true;do echo SummerWind;sleep 1;done"
],
#容器状态
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2020-07-24T07:14:38.085351505Z",
"FinishedAt": "2020-07-24T07:20:02.584374216Z"
},
"Image": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f",
"ResolvConfPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/hostname",
"HostsPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/hosts",
"LogPath": "/var/lib/docker/containers/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c/c5672e9223d29718ff49ac61be7dbc96bdee87d84f451c24f95fa977ac2b442c-json.log",
"Name": "/recursing_cartwright",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d-init/diff:/var/lib/docker/overlay2/ff9cceb791db48b712f90809757294fdaf615cb173345e17455dfca4c330c537/diff",
"MergedDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/merged",
"UpperDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/diff",
"WorkDir": "/var/lib/docker/overlay2/2526bc57fe2854002359d0a0c9eb536460cf1474c70ad0fdd2e8ea215ef7679d/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "c5672e9223d2",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash",
"-c",
"while true;do echo SummerWind;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200611",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "96108bd4f8742d18781c000c3633d5a384c0927d6b6e4fbc2b6a0e41ab729198",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/96108bd4f874",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "e1e9632f31bacd00015077223d5747f0569d855480fc81e0517c2a52bed39fee",
"EndpointID": "",
"Gateway": "",
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "",
"DriverOpts": null
}
}
}
}
]
- docker exec # 进入容器后开启一个新的终端,可以在里面操作【常用】
- docker attach # 进入容器正在执行的终端,不会启动新的进程!
docker cp 容器ID:容器内的目录或文件 主机上的路径
#后台交互运行一个容器
[root@iZbf2jzc4i64zvZ ~]# docker run -it centos /bin/bash
#运行并进入容器
[root@d250d9bba70b /]# [root@iZbf2jzc4i64zvZ ~]#
#容器的文件
[root@d250d9bba70b /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@d250d9bba70b /]# cd /home/
#进入容器home目录,创建SummerWind.java文件
[root@d250d9bba70b home]# touch SummerWind.java
#显示已经创建
[root@d250d9bba70b home]# ls
SummerWind.java
#退出容器并停止容器
[root@d250d9bba70b home]# exit
exit
#查看运行着的容器 没有
[root@iZbf2jzc4i64zvZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#查看所有运行过的容器 有【容器在 里面的数据就在,不论是否运行都可以拷贝~~!!!】
[root@iZbf2jzc4i64zvZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d250d9bba70b centos "/bin/bash" 2 minutes ago Exited (0) 17 seconds ago upbeat_volhard
#拷贝命令:docker cp 容器ID:容器内的目录或文件 主机上的路径
[root@iZbf2jzc4i64zvZ ~]# docker cp d250d9bba70b:/home/SummerWind.java /home
[root@iZbf2jzc4i64zvZ ~]# cd ..
[root@iZbf2jzc4i64zvZ /]# ls
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@iZbf2jzc4i64zvZ /]# cd /home
#查看主机上的home文件夹下 已经把容器内的文件拷贝到主机上了
[root@iZbf2jzc4i64zvZ home]# ls
SummerWind.java
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
# 命令:
docker cp /MyFile/PAIANG.sql bd15ab4384fd:/tmp/
# 容器中查看:
root@bd15ab4384fd:/# cd /tmp/
root@bd15ab4384fd:/tmp# ll
total 90460
drwxrwxrwt 1 root root 4096 Nov 10 14:04 ./
drwxr-xr-x 1 root root 4096 Nov 10 14:04 ../
drwxrwxrwt 2 root root 4096 Feb 14 2019 .oracle/
-rw-r--r-- 1 root root 92616247 Nov 10 13:54 PAIANG.sql
4. 命令图解
5. 命令实战
#下载镜像
#运行Nginx容器(镜像要放在最后)
[root@iZbf2jzc4i64zvZ /]# docker run -d --name MyNginx -p 3344:80 nginx
aab1ba8e191cda24e673ca0f61f19c64a74393a685b35e31a0c5401ab3732ccb
[root@iZbf2jzc4i64zvZ /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aab1ba8e191c nginx "/docker-entrypoint.猞" 17 seconds ago Up 15 seconds 0.0.0.0:3344->80/tcp MyNginx
#本地测试 curl,居然还有这?
[root@iZbf2jzc4i64zvZ /]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
#进入Tomcat容器
[root@iZbf2jzc4i64zvZ ~]# docker exec -it MyTomcat /bin/bash
root@c7cf366b8a40:/usr/local/tomcat#
#查看容器目录下的文件
root@c7cf366b8a40:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
#拷贝webapps.dist目录下所有文件到webapps目录下
root@c7cf366b8a40:/usr/local/tomcat# cp -r webapps.dist/* webapps
#去查看 拷贝过来了~!@
root@c7cf366b8a40:/usr/local/tomcat# cd webapps
root@c7cf366b8a40:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
存在的问题:
启动后访问发现是404,去webapps目录下查看是空的,而webpass.dist目录下有,拷贝到webapps目录下 或 修改webapps.dist文件名为webapps
# MySQL8.0镜像拉取
[root@sunmmerwind ~]# docker pull mysql:8.0
8.0: Pulling from library/mysql
Digest: sha256:04ee7141256e83797ea4a84a4d31b1f1bc10111c8d1bc1879d52729ccd19e20a
Status: Downloaded newer image for mysql:8.0
docker.io/library/mysql:8.0
# 查看拉取镜像
[root@sunmmerwind ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0 0627ec6901db 8 days ago 556MB
# 安装
[root@sunmmerwind conf]# docker run -d -p 3308:3306 -v /usr/mysql/conf:/etc/mysql/conf.d -v /usr/mysql/data:/var/lib/mysql --name MySQL8.0 -e MYSQL_ROOT_PASSWORD=123456 0627ec6901db
d50c00e7401eb50c8595350fde0e10003046afd8d4007a6255b899a8af9c4d19
安装参数解释:
-v :挂载宿主机目录和 docker容器中的目录,前面是宿主机目录,后面是容器内部目录
-d :后台运行容器
-p :映射容器端口号和宿主机端口号
-e :环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码
–name:容器名字
# 查看容器是否启动成功
[root@sunmmerwind conf]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d50c00e7401e 0627ec6901db "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp MySQL8.0
五、镜像
1. 概念
镜像是一种轻量级、可执行的独立软件包。
用来打包软件运行环境和基于运行环境开发的软件。
它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量及配置文件。
2. 作用
开发的所有应用,直接打包成docker镜像,就可以运行起来~!
方便部署和扩展~
3. 如何得到镜像?
- 远程仓库下载
- 朋友拷贝
- 自己制作
4. 镜像原理
特点:
Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!
它可以把多个目录(也叫分支)内容联合挂载到同一个目录下,而目录的物理位置是分开的。
Union文件系统是Docker镜像的基础。
镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。白话:共用的东西,不会存在两份 相互调用。
- bootfs(boot file system)
类似电脑从黑屏到开机 中间的加载过程
- rootfs(root file system)
类似启动后的操作系统
对于精简的OS,rootfs可以很小,只需包含最基本的命令、工具和程序库就可以了。
因为底层直接用主机的内核,自己只需要提供rootfs就可以了。
5. 提交镜像
命令:docker commit -a=“作者” -m=“提交的信息” 容器ID 自定义名:版本号
用docker images命令就可以看到我们提交的镜像了~!
不是提交到远程,而是提交给本地镜像库,哈哈~!
[root@iZbf2jzc4i64zvZ ~]# docker commit -a="CoderWind" -m="add webapps content" c7cf366b8a40 mytomcat:001
sha256:c521385f72166af3e027cd39b10c7b7789df82682755f1a159bc7b949cab94e2
[root@iZbf2jzc4i64zvZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mytomcat 001 c521385f7216 5 seconds ago 652MB
tomcat latest b4f6a90c69a4 3 days ago 647MB
nginx latest 8cf1bfb43ff5 4 days ago 132MB
centos latest 831691599b88 5 weeks ago 215MB