目录
2、安装yum相关工具,下载docker-ce.repo文件
docker run -d -p 8090:80 --name sc-nginx nginx :启动docker容器
docker logs + 容器id : 查看容器启动失败的日志信息
编辑 docker rm + 容器名字 : 删除启动失败的容器
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
vmware:workstation 入门级的产品
docker:容器技术的经典代表
k8s: containerd
CNCF: 云原生基金会:k8s(kubernetes)
docker 是容器运行时的软件 -- 容器软件
k8s是管理容器运行时软件(docker,containerd,rkt等)集群的软件
k8s建立在docker之上的软件
docker和k8s都是使用go语言开发的
只要是与k8s相关的技术都叫云原生相关的技术
#############################################################################
官方网站:
- yum remove docker \
- docker-client \
- docker-client-latest \
- docker-common \
- docker-latest \
- docker-latest-logrotate \
- docker-logrotate \
- docker-engine
#############################################################################
yum install -y yum-utils
- yum-config-manager \
- --add-repo \
- https://download.docker.com/linux/centos/docker-ce.repo
下载docker-re.repo文件会存放在/etc/yum.repos.d下面
- [root@docker yum.repos.d]# ls
- CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
- CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
- CentOS-Debuginfo.repo CentOS-Sources.repo docker-ce.repo
#############################################################################
ce:container engine 容器引擎
docker是一个容器管理的软件
docker-ce是服务器端软件
docker-ce-cli是客户端软件
containerd.io是底层用来启动容器的
docker-compose-plugin 是compose插件,用来批量启动很多容器,在单台机器上面
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
#############################################################################
- [root@docker yum.repos.d]# systemctl start docker
- [root@docker yum.repos.d]# ps aux | grep docker
- root 11373 1.2 6.0 1086656 60408 ? Ssl 11:40 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
- root 11507 0.0 0.0 112824 980 pts/0 R+ 11:40 0:00 grep --color=auto docker
- [root@docker yum.repos.d]#
#############################################################################
- [root@docker yum.repos.d]# systemctl enable docker
- Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
- [root@docker yum.repos.d]#
#############################################################################
docker启动的每一个容器背后就是一个linux进程
- [root@docker yum.repos.d]# docker --version
- Docker version 20.10.17, build 100c701
- [root@docker ~]# docker version
- Client: Docker Engine - Community
- Version: 20.10.17
- API version: 1.41
- Go version: go1.17.11
- Git commit: 100c701
- Built: Mon Jun 6 23:05:12 2022
- OS/Arch: linux/amd64
- Context: default
- Experimental: true
-
- Server: Docker Engine - Community
- Engine:
- Version: 20.10.17
- API version: 1.41 (minimum version 1.12)
- Go version: go1.17.11
- Git commit: a89b842
- Built: Mon Jun 6 23:03:33 2022
- OS/Arch: linux/amd64
- Experimental: false
- containerd:
- Version: 1.6.7
- GitCommit: 0197261a30bf81f1ee8e6a4dd2dea0ef95d67ccb
- runc:
- Version: 1.1.3
- GitCommit: v1.1.3-0-g6724737
- docker-init:
- Version: 0.19.0
- GitCommit: de40ad0
- [root@docker ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- fc652e8c734a nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp sc-nginx
镜像里面包含了我们需要的软件的代码和基础环境
- [root@docker ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx latest 2b7d6430f78d 2 days ago 142MB
[root@docker yum.repos.d]# docker pull nginx
docker run是启动容器的命令
-d 在后台运行 daemon守护进程
-p 8090:80 指定端口映射
--name sc-nginx 指定容器名字
nginx 是镜像的名字
- [root@docker yum.repos.d]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- fc652e8c734a nginx "/docker-entrypoint.…" 4 minutes ago Up 4 minutes 0.0.0.0:8090->80/tcp, :::8090->80/tcp sc-nginx
- [root@docker yum.repos.d]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- nginx latest 2b7d6430f78d 2 days ago 142MB
- [root@docker yum.repos.d]#

docker rm + 容器名字 : 删除启动失败的容器正在运行的容器不能直接删除,需要先将其停止。

#############################################################################
- [root@docker ~]# docker pull mysql:5.7.39
- 5.7.39: Pulling from library/mysql
- 9815334b7810: Pull complete
- f85cb6fccbfd: Pull complete
- b63612353671: Pull complete
- 447901201612: Pull complete
- 9b6bc806cc29: Pull complete
- 24ec1f4b3b0d: Pull complete
- 207ed1eb2fd4: Pull complete
- 27cbde3edd97: Pull complete
- 0a5aa35cc154: Pull complete
- e6c92bf6471b: Pull complete
- 07b80de0d1af: Pull complete
- Digest: sha256:c1bda6ecdbc63d3b0d3a3a3ce195de3dd755c4a0658ed782a16a0682216b9a48
- Status: Downloaded newer image for mysql:5.7.39
- docker.io/library/mysql:5.7.39
- [root@docker ~]# docker run -d --name sc-mysql-1 -p 33060:3306 -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.39
- [root@docker ~]# docker run -d --name sc-mysql-2 -p 33061:3306 -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.39
-
- [root@docker ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 04f658accb02 mysql:5.7.39 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 33060/tcp, 0.0.0.0:33061->3306/tcp, :::33061->3306/tcp sc-mysql-2
- 3d6aa9a3116b mysql:5.7.39 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 33060/tcp, 0.0.0.0:33060->3306/tcp, :::33060->3306/tcp sc-mysql-1
- fc652e8c734a nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp sc-nginx
- [root@docker ~]#
[root@docker ~]# docker exec -it sc-mysql-1 bash
exec :进入容器
-it : 开启一个终端
- [root@docker ~]# docker exec -it sc-mysql-1 bash
- bash-4.2#
- bash-4.2# ls
- bin dev entrypoint.sh home lib64 mnt proc run srv tmp var
- boot docker-entrypoint-initdb.d etc lib media opt root sbin sys usr
- bash-4.2# mysql -uroot -p'sc123456'
- 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 2
- Server version: 5.7.39 MySQL Community Server (GPL)
-
- Copyright (c) 2000, 2022, 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> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
-
- mysql> create database sanchuang;
- Query OK, 1 row affected (0.00 sec)
-
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sanchuang |
- | sys |
- +--------------------+
- 5 rows in set (0.00 sec)
当我们创建容器的时候默认会给root用户授权从本地任何机器登录
- mysql> select user,host from mysql.user;
- +---------------+-----------+
- | user | host |
- +---------------+-----------+
- | root | % |
- | mysql.session | localhost |
- | mysql.sys | localhost |
- | root | localhost |
- +---------------+-----------+
- 4 rows in set (0.00 sec)
-
使用sqlyog连接docker容器中的mysql服务器

#############################################################################
镜像(image):
镜像是打包好的软件,
容器(container):
容器是运行镜像的地方,背后就是起一个进程来运行这个镜像仓库():
仓库是存放镜像的地方 -- docker hub

一个docker进程就是一个docker容器
- [root@docker ~]# ps -ef | grep docker
- root 11373 1 0 14:08 ? 00:00:19 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
- root 11671 11373 0 14:24 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8090 -container-ip 172.17.0.2 -container-port 80
- root 11675 11373 0 14:24 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8090 -container-ip 172.17.0.2 -container-port 80
- root 12173 11373 0 15:17 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 33060 -container-ip 172.17.0.3 -container-port 3306
- root 12177 11373 0 15:17 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 33060 -container-ip 172.17.0.3 -container-port 3306
- root 12483 11373 0 15:19 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 33061 -container-ip 172.17.0.4 -container-port 3306
- root 12487 11373 0 15:19 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 33061 -container-ip 172.17.0.4 -container-port 3306
- root 12751 11937 0 15:20 pts/2 00:00:00 docker exec -it sc-mysql-1 bash
- root 12836 12130 0 16:14 pts/3 00:00:00 grep --color=auto docker
#############################################################################
alpine : 内部测试版本,bug较多,一般开发人员和测试人员测试的版本
beta:公开测试版本,alpha的升级版,仍存在bug
stable:稳定版本,最终发行版
#############################################################################

docker的优势
启动速度快
资源消耗小,因为docker容器相当于共享宿主机的内存,内核和基础镜像,消耗内存少
扩展方便
docker的缺点
app的隔离这块,没有虚拟机彻底
层次不一样,虚拟机多一层封装
#############################################################################
底层隔离机制:
所有的容器运行起来后都是一个进程
进程和进程之间的隔离靠操作系统来完成
所有的进程都是共享linux操作系统的内核的
如果理解为人,命名空间理解为人活动的场所
如果进程使用了相同命名空间,那么进程之间就可以通信了,互相之间可以有交集
linux内核里有个软件LXC_linux Container
1.LXC是什么?
LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。
2.LXC可以做什么?
LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。
命名空间(name apace)的种类
进程命名空间
IPC命名空间
挂载命名空间
用户命名空间
UTS命名空间
Control Groups
