作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:
Docker基本情况
Docker基本命令(本小节属于)
Dockerfile
Docker镜像
Docker仓库
Docker原理
Docker网络&存储&日志
Docker-Compose
Docker番外篇
上小节我们从docker的原理上来讲解了下docker的运行机制,今天我们就从实际操作来体验下docker run的在运行这些操作容器。
我们在Docker被墙以后,我为什么这样做,里面提到过镜像实际上分类,一种是操作系统镜像,一种是业务镜像。里面有些例子可能不是很合适。从我们上小节的例子可能分为是否有前台进程来更适合一点。针对不同的镜像会使用不同的参数,下面就针对这些参数做详细说明。
启动基本参数
这些参数的组合代表了这个容器的运行方式及能否正常启动**。**
ruby
#效果是一样的,启动则退出
docker run centos:7
docker run -d centos:7
#启动则进入容器,exit退出容器,则容器关闭
[root@localhost ~]# docker run -it centos:7[root@b914ccb36e5c /]#
#会阻塞当前终端操作,中断终端则容器退出
docker run nginx
#不会阻塞当前终端,容器会持续在后台运行
docker run -d nginx
下面的这些参数不影响容器是否启动成功,但是它能决定能否按照我们的预期方式进行运行。
添加环境变量
bash
# 创建容器,注入数据库密码环境变量
# 这里只是演示,具体请设置强密码
[root@localhost ~]# docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw 192.168.31.43:5000/mysql:5.7
da6a4018d3c1e47b1fae3f0adb63ff78f3ef7fcde7899158e0caaf6da43a188a
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da6a4018d3c1 192.168.31.43:5000/mysql:5.7 "docker-entrypoint.s..." 3 seconds ago Up 2 seconds 3306/tcp, 33060/tcp jolly_euler
#进入容器,并使用注入的密码进行登录mysql
[root@localhost ~]# docker exec -it da6 bash
bash-4.2# mysql -uroot -pmy-secret-pw
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
添加端口映射
bash
[root@localhost ~]# docker run -d -p80:80 192.168.31.43:5000/nginx
7a559247280c4c6211c89197b2808ca326a0646f644f0433b04a6e70fef0d2ad
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES7a559247280c 192.168.31.43:5000/nginx "/docker-entrypoint...." 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp stoic_hodgkin
#这里的端口都是docker进程在监听
[root@localhost ~]# netstat -lnp |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7070/docker-proxy
添加磁盘挂载
perl
# 容器外面的数据文件可以挂载到容器内部
# 容器里面创建的文件实际会创建到主机里面
[root@localhost ~]# ls
centos7.tar.gz
[root@localhost ~]# docker run -it -v /root:/root centos:7
[root@2eb1e448090b /]# ls /root/
centos7.tar.gz
[root@2eb1e448090b /]# touch /root/aaa
[root@2eb1e448090b /]# exit
exit
[root@localhost ~]# ls
aaa centos7.tar.gz
添加主机名
csharp
# 可以看到容器的主机名是我们设置的,并不是随机生成
[root@localhost ~]# docker run -h test001 -it centos:7
[root@test001 /]#
添加容器名字
csharp
# 容器名字在最后,没添加就是随机名字
[root@localhost ~]# docker run -itd centos:7
90b11f48c37dd2f8483a2ff2ae6f3797767ce508a465fd9cfda57eab57af5e53
[root@localhost ~]# docker run -itd --name centos7 centos:7
a9c28148a23c6ae2a8f77cc7258ffd7a32ff9901094b5c56b256515ac65f0c7d
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a9c28148a23c centos:7 "/bin/bash" 11 seconds ago Up 10 seconds centos7
90b11f48c37d centos:7 "/bin/bash" 43 seconds ago Up 42 seconds optimistic_shirley
退出则删除
csharp
# 容器退出以后,容器就被自动删除
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker run -it --rm centos:7
[root@83510e3d5cdd /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@83510e3d5cdd /]# exit
exit
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
限制cpu
csharp
# 限制了只给0.5核,所以容器里面的死循环可以跑到50%
[root@localhost ~]# docker run -itd --cpus="0.5" centos:7
1a408a957c2c60519e3f15aed8b23ae6d069ea14c30710aa792d93689331c508
[root@localhost ~]# docker stats 1a4
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1a408a957c2c youthful_bassi 49.94% 1.262MiB / 990.9MiB 0.13% 656B / 0B 336kB / 0B 2
限制内存
csharp
# 限制以后,这里的limit就不再是宿主机的内存,而是我们给的限制
[root@localhost ~]# docker run -itd -m 512M centos:7
1888ebd8c68bc2edca3410049557e31d20cb9058ead658a891c13007ba39e4b2
[root@localhost ~]# docker stats 1888
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
1888ebd8c68b gallant_brattain 0.00% 668KiB / 512MiB 0.13% 586B / 0B 3.82MB / 0B 1
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。