虚拟化软件 go语言
容器 container 能将一个软件放到里面运行 ---》装软件的地方,软件在docker容器里运行。会限制进程所使用的cpu、内存、磁盘IO、网络流量等资源。 可以限制资源使用
在centos7.9系统的去安装docker
[root@localhost ~]# hostnamectl set-hostname docker
[root@localhost ~]# su
[root@docker ~]# cat /etc/centos-release 查看centos系统的版本
CentOS Linux release 7.9.2009 (Core)
[root@docker ~]# cd /etc/yum.repos.d/ 进入yum存放仓库文件的目录
删除官方提供的仓库文件
[root@docker yum.repos.d]# rm -rf *
配置阿里云的centos7.9的源的仓库文件(软件下载网站)
[root@docker yum.repos.d]# curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
[root@docker yum.repos.d]# ls
Centos-7.repo
安装yum相关的工具,下载docker-ce.repo文件
[root@docker ~]# yum install yum-utils -y
[root@docker ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 下载安装docker的仓库文件
生成安装docker的缓存
[root@docker ~]#yum makecache fast
[root@docker ~]#yum -y install docker-ce 安装docker
[root@docker ~]#systemctl start docker 启动docker
[root@docker ~]#systemctl enable docker 设置开机启动
[root@docker yum.repos.d]# ps aux|grep docker 查看dockerd进程
root 8614 1.0 1.4 1554088 55156 ? Ssl 11:38 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 8791 0.0 0.0 112824 980 pts/0 S+ 11:38 0:00 grep --color=auto docker
关闭firewalld 禁止firewalld开机启动
[root@docker yum.repos.d]# systemctl stop firewalld
[root@docker yum.repos.d]# systemctl disable firewalld
禁用selinux
[root@docker yum.repos.d]# vim /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
[root@docker yum.repos.d]# reboot 重启系统
[root@docker ~]# docker version 查看docker版本
Client: Docker Engine - Community
Version: 26.1.4
API version: 1.45
Go version: go1.21.11
Git commit: 5650f9b
镜像 :是docker容器启动的软件所在的文件--》镜像文件理解为需要启动的app软件
需要下载nginx.tar镜像文件,然后上传到linux系统里,再导入
[root@docker ~]# ls
anaconda-ks.cfg nginx.tar
[root@docker ~]# docker load -i nginx.tar 将nginx.tar镜像文件导入到docker软件里
cb4596cc1454: Loading layer 77.87MB/77.87MB
e53d016bbab1: Loading layer 113MB/113MB
[root@docker ~]# docker images 查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest bc649bab30d1 9 months ago 187MB
运行一个nginx的容器
[root@docker ~]# docker run -d -p 80:80 --name sc-nginx-1 nginx
a5b7c61f5f02346ada8fb1cf5aea07e00ebbfa676a16885a847cc22d2cf425b1
先创建一个容器,然后启动容器
-d 容器进程在后台运行 daemon
-p 将容器发布出去,让外面的机器可以访问 publish ---》端口映射--》宿主机和容器的端口之间的一个映射 map
80:80 81:80 3307:3306
前面的80是宿主机的端口,必须唯一
后面的80是容器的端口,可以一样
--name sc-nginx-1 指定容器的名字,必须唯一
nginx 使用的镜像文件的名字
docker run = docker create + docker start
[root@docker ~]# docker ps 查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5b7c61f5f02 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp sc-nginx-1
在windows里访问linux机器的ip 192.168.159.142
一个容器在docker里运行,本质上在linux系统里就是一个进程 一个容器对应一个进程
[root@docker ~]# ps aux|grep container
proxy -proto tcp -host-ip :: -host-port 80 -container-ip 172.17.0.2 -container-port 80
root 1820 0.0 0.2 1236448 9872 ? Sl 12:02 0:02 /usr/bin/containerd-shim-runc-v2 -namespace moby -id a5b7c61f5f02346ada8fb1cf5aea07e00ebbfa676a16885a847cc22d2cf425b1 -address /run/containerd/containerd.sock
root 13263 0.0 0.0 112824 980 pts/0 S+ 14:48 0:00 grep --color=auto container
[root@docker ~]# kill -9 1820
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]# docker inspect sc-nginx-1 查看容器相关信息
docker: Error response from daemon: Conflict. The container name "/sc-nginx-1" is already in use by container "a5b7c61f5f02346ada8fb1cf5aea07e00ebbfa676a16885a847cc22d2cf425b1". You have to remove (or rename) that container to be able to reuse that name.
已经有了 直接docker start sc-nginx-1 就起来了
[root@docker ~]# docker ps -a 查看所有的容器(运行和退出)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5b7c61f5f02 nginx "/docker-entrypoint.…" 3 hours ago Exited (137) 3 minutes ago sc-nginx-1
[root@docker ~]# docker create -p 81:80 --name=sc-nginx-2 nginx 创建一个容器
6f864a3ab3e39a734670943ebcbf8b2020a74b88694b58afd6d049b4549c675d
[root@docker ~]# docker start sc-nginx-2 启动容器
sc-nginx-2
获取mysql镜像
1. 登录阿里云Docker Registry
docker login --username=fengkezhen registry.cn-hangzhou.aliyuncs.com
Admin@123用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
[root@docker ~]# docker login --username=fengkezhen registry.cn-hangzhou.aliyuncs.com
2. 从Registry中拉取镜像
[root@docker ~]# docker pull registry.cn-hangzhou.aliyuncs.com/fengdy/mysql:5.7.41
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-hangzhou.aliyuncs.com/fengdy/mysql 5.7.41 0018a8d83892 16 months ago 455MB
[root@docker ~]# docker tag 0018a8d83892 mysql:5.7.41 将一个镜像改名为另外一个名字,将registry.cn-hangzhou.aliyuncs.com/fengdy/mysql改名为mysql
启动MySQL容器
docker run -d -p 3307:3306 --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD='sc@123456' mysql:5.7.41
-e MYSQL_ROOT_PASSWORD='sc@123456' 给容器传递一个环境变量 environment 给MySQL的root用户设置密码
[root@docker ~]# docker exec -it sc-mysql-1 bash 进入容器内部
bash-4.2# mysql -uroot -p'sc@123456' 登录MySQL软件
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
docker 3大核心概念
镜像: image 是一个文件,里面包含了一个微型操作系统+核心代码程序+依赖库环境 -->镜像文件越小越好 ---》是人制作出来的。alpine
[root@docker ~]# docker save -o mysql-5-7-41.tar mysql:5.7.41
[root@docker ~]# ls
anaconda-ks.cfg mysql-5-7-41.tar nginx.tar
[root@docker ~]# docker rm sc-mysql-1
sc-mysql-1
删除镜像需要先停止使用这个镜像的容器,然后删除容器,再删除镜像
[root@docker ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/fengdy/mysql:5.7.41
[root@docker ~]# docker load -i mysql-5-7-41.tar
Loaded image: mysql:5.7.41
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest bc649bab30d1 9 months ago 187MB
mysql 5.7.41 0018a8d83892 16 months ago 455MB
仓库 repository / Registry: 存放镜像的地方
公共镜像仓库: 对外开放,任何人都可以访问
私人镜像仓库: 自己把自己经常使用的镜像存放的地方 ---》horbor 、阿里云的ACR
容器 container : 运行镜像的地方,容器本质上是一个进程,需要消耗cpu、内存、磁盘、网络等资源
ubuntu里安装docker
1.安装依赖的软件
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
2. Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
3.下载中国科技技术大学的仓库文件
sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/$(lsb_release -cs) stable"
4.安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
5.查看docker进程是否运行
feng@sc:~$ sudo ps aux|grep docker
root 3608 0.0 1.9 1913900 76928 ? Ssl 09:17 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
feng 3904 0.0 0.0 6544 2304 pts/0 S+ 09:24 0:00 grep --color=auto docker
ubuntu里默认安装好软件,自动启动并且设置开机启动
feng@sc:~$ systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Fri 2024-07-19 09:17:43 UTC; 7min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
containerd=/run/containerd/containerd.>
激活ubuntu系统里的root用户
1.给root用户设置密码
feng@sc:~$ sudo passwd root 给root用户设置密码
New password:
Retype new password:
passwd: password updated successfully
feng@sc:~$ su - root 切换到root用户登录
Password:
root@sc:~#