Docker
- Unbuntu安装docker
- docker的相关操作
- 开启docker服务
- 查看镜像
- 搜索镜像
- 拉取镜像
- 删除镜像
- 运行容器
- 查看容器
- 停止运行容器
- 重新运行容器
- 删除容器
- 构建一个Docker镜像
- 登陆Dockerhub
- 提交镜像到dockerhub
- 退出dockerhub
- 进入正在运行的容器的交互式终端
- 其他docker操作
- docker拉取mysql
- mysql的相关操作
作者只是个docker入门新手,有些地方可能有误
Unbuntu安装docker
一开始我是想使用
yum -y install docker
这个命令安装docker的,但是这个命令对Unbuntu操作系统不适用
原因是在 Ubuntu 操作系统中,yum 命令并不是默认的软件包管理器。yum 命令主要用于基于 Red Hat 系列(如 CentOS、Fedora)的发行版。而在 Ubuntu 中,使用的是 apt 命令进行软件包管理。
所以可以使用以下方法:
1.更新apt软件库
sudo apt-get update
2.安装存储库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
3.下载证书
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4.apt添加docker的下载位置并使用阿里云镜像
add-apt-repository \
"deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
注意此步骤需要在root用户下进行
4.1(切换到root用户)
Unbuntu可能默认没有设置root的用户的密码,所以说如果使用
su root
123456
的方式,密码是不正确的,可以使用如下方式进入root用户
sudo -i
获取管理员权限之后,使用
passwd root
设置root用户的密码,然后就可以使用su root直接进入root用户
5.再次更新apt软件库
sudo apt-get update
6.用apt安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io
7.验证是否安装成功
docker --version
docker的相关操作
开启docker服务
systemctl start docker
systemctl start docker.service
二者是相同的命令,是因为 .service后缀是可以省略的
开启服务后,使用
docker version
即可看到对应的服务器和客户端.
值的一提的是,即便你没有使用这个命令,在大部分情况下,也是可以正常使用docker的.
因为该命令的目的是手动启动 Docker 引擎
但是当你使用docker的其他命令时,如:
docker pull 镜像名
Docker 客户端会自动连接到 Docker 引擎并执行相应的操作
所以说大多数情况下,是不需要我们手动开启Docker服务的,Docker命令会自动帮助我们连接Docker引擎.
以下是一些可能需要手动启动 Docker 引擎的情况:
1.系统启动后 Docker 引擎未自动启动:在某些配置中,Docker 引擎可能未设置为自动启动。如果你在系统启动后需要使用 Docker,但发现 Docker 引擎未运行,则可以使用 sudo systemctl start docker 命令手动启动它。
2.Docker 引擎异常停止:在某些情况下,Docker 引擎可能会异常停止,导致无法执行 Docker 相关操作。如果你尝试使用 Docker 命令时遇到连接错误或无法响应的情况,可以尝试先停止 Docker 引擎(使用 sudo systemctl stop docker 命令),然后再启动它(使用 sudo systemctl start docker 命令)。
3.需要以管理员权限运行 Docker:在某些 Linux 系统上,执行 Docker 命令可能需要管理员权限。如果你尝试执行 Docker 命令时遇到权限错误,可以使用 sudo 命令以管理员身份运行命令,例如 sudo docker pull。
成功启动docker服务后,我们可以通过
systemctl status docker
systemctl status docker.service
来查看docker的启动状态.
查看镜像
我们刚刚下载好的docker里面是什么镜像都没有的
我们可以使用
docker images
来查看docker镜像
*但是有时候我们在刚下好docker之后,使用docker images命令查看镜像时会爆出错误:“permission denied while…”
这是因为当前用户的权限不够,你需要把当前用户放入docker的用户组之中
sudo usermod -aG docker 用户名
这样普通用户也可以直接使用docker命令了
搜索镜像
docker search 镜像名
拉取镜像
docker pull 镜像名
*拉取失败,如何解决:
如果系统提示
可以按照如下方法解决:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
之后就可以正常拉取镜像了
docker imgaes
查看拉取到的镜像↑
删除镜像
docker rmi 镜像名
删除的时候需要带上版本,如果不带版本默认删除latest版本
docker rmi 镜像名:版本
运行容器
运行容器
docker run 镜像名
后台运行容器
docker run -d 镜像名
这二者的区别是一个是前台运行容器,一个是后台运行容器
如果是前台运行容器的话,会直接把容器的执行结果打印在终端上,并会占用控制台,但是如果是后台运行的话,容器将在后台(守护进程模式)运行,不会将容器的输出直接打印到终端。容器将以守护进程的形式在后台运行,并且不会占用当前终端的控制权。你可以继续在终端中执行其他命令而不受容器的影响
运行容器时给容器起名
docker run --name 容器名 镜像名
–name是给生成的容器起一个名字,如果不用–name的话,生成的容器可能是一个随机生成的名字,不方便阅读.
运行容器并且绑定端口
docker run -p 主机上端口号:容器内部端口号 镜像名
docker run -p 3306:3306 images
具体来说,通过端口映射,你可以将容器内部的应用程序绑定到主机上的一个特定端口,使得主机上的其他进程或外部系统可以通过该端口与容器内的应用程序进行交互。这种机制允许容器内的应用程序提供网络服务,同时可以通过主机的网络接口进行访问。
例如,如果容器内运行着一个Web服务器,你可以使用端口映射将容器的Web服务器绑定到主机的某个端口,然后通过在主机上访问该端口,即可访问到容器中的Web服务器。这样,主机上的用户或其他系统就可以通过主机的IP地址和映射的端口与容器内的Web服务器进行通信。
比如说现在有一个mysql的容器,如果不绑定端口的话,那么它就仅仅是个mysql而不能跟主机上的其他程序交互,如果我给它绑定一个端口,我就可以写一个跟数据库连接的项目.
运行时进行宿主机和容器的挂载
docker run -v 用于将宿主机(Host)的目录或文件挂载到容器中的指定路径上。这样可以实现宿主机和容器之间的文件共享。
docker run -v 宿主机目录或文件的路径:容器中文件的目录或路径 镜像名
设置容器内的环境变量
docker run -e 环境变量名称=要设置的值 镜像名
例如:我将mysql容器中的密码设置为 123456
docker run -e MYSQL_ROOT_PASSWORD=123456 mysql 5.7
查看容器
列出所有正在运行的容器
docker ps
查看所有的容器
docker ps -a
停止运行容器
docker stop 容器id
重新运行容器
docker restart 容器id
删除容器
删除一个停止的容器
docker rm 容器id
构建一个Docker镜像
docker built -t 镜像名 dockerfile的路径
docker built -t hello-docker .
上面这个例子是我创建一个名字为 hello-docker 的镜像 “.”是dockerfile的路径
接下来的步骤将说明如何简单的自己创建一个镜像
cd ~
mkdir -p dockerWorkspace
cd dockerWorkspace
touch sunjin.sh //创建一个shell脚本
chmod 777 sunjin.sh //给shell脚本加权限才能运行
vim sunjin.sh //编辑这个脚本
脚本的内容,随便写点东西
echo "hello,sunjin"
touch Dockerfile
vim Dockerfile
Dockerfile文件内容:
From alpine:latest
ADD ./sunjin.sh /sunjin.sh #将本地的 sunjin.sh文件复制到镜像中的
RUN chmod + x /sunjin.sh #允许在容器内部执行命令
CMD ["/bin/sh","-c","sunjin.sh"]
built -t就是通过Dockerfile文件中的内容进行构建的
docker built -t 镜像名 dockerfile路径
Dockefile板子示例
# 使用镜像 ubuntu:latest
FROM ubuntu:latest
#将本地文件,目录的内容复制到镜像中
ADD <src> <dest>
#其中src是本地的源文件或者目录,dest是镜像中的目标路径
# 安装必要的软件包
RUN apt-get update && apt-get install -y \
software-package1 \
software-package2
# 拷贝文件到镜像中
COPY ./app /app
# 设置工作目录
WORKDIR /app
# 运行启动命令
CMD ["python", "app.py"]
登陆Dockerhub
docker login -u 账号 -p 密码
但是有些系统比如Unbuntu可能会有这样的提示
这是在提示你,直接将密码放在命令行中运行的方式并不安全,建议你将密码存在一个文件之中,然后用文件传输的方式输入密码.
查看自己的登陆信息
docker info
其中,username会显示你的用户名
搜索dockerhub上的库
docker search 关键字
提交镜像到dockerhub
给镜像打标签设置版本
docker tag 原镜像的id 新镜像名:版本
docker tag 原镜像名:版本 新镜像名:版本
我们在提交镜像之前,必须要先给镜像打标签,标明推入的仓库以及版本
docker tag 原镜像名:版本 用户名/仓库名:版本
我将mysql镜像换了一个名字并设置版本为1.0版本
docker tag c20987f18b13 my_mysql:1.0
这里标明mysql 5.7要被推入sunjin033/sunjin033中,版本为1.0
docker tag mysql:5.7 sunjin033/sunjin033:version_1.0
将镜像提交到个人仓库
docker push 用户名/库名:版本
docker push sunjin033/sunjin033:version_1.0
然后系统就会将我的 sunjin033/sunjin033:version_1.0提交到dockerhub上
退出dockerhub
docker logout
进入正在运行的容器的交互式终端
docker exec -it <container_id> bash
这样就可以正式的使用容器了
其他docker操作
查看容器日志
docker logs <container_id>
复制文件或目录到容器中
docker cp <local_path> <container_id>:<container_path>
复制容器中的文件或目录到主机中
docker cp <container_id>:<container_path> <local_path>
docker拉取mysql
1.先拉取一个mysql镜像
docker pull mysql:5.7
2.创建实例并且绑定端口
docker run -d -p 3306:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
分析
- -d后台运行,不占用控制台
- -p绑定容器的端口,将主机的3306和容器的3306绑在一起
- -v进行文件的挂载,可以让宿主机和容器共享数据,使用数据卷
- -e设置容器的环境变量,将mysql的密码设置为123456
- –name 给容器起一个别名,方便阅读
3.进入已经创建好的mysql容器之中
docker exec -it <container-name> bash
docker exec -it mysql容器的ID bash
docker exec -it mysql bash
4.输入mysql的密码,即可成功进入mysql
mysql -u root -p
紧接着输入mysql的密码123456即可出现mysql的控制台
我们就可以在这里通过sql语句愉快的使用mysql了
Docker数据卷
*值的一提的是,Docker中的数据是临时的,如果我们将一个已经实例化好的mysql容器删除了,再重新创建一个mysql容器的话,那么之前mysql中的数据就会消失.
如果要保留 MySQL 数据,你可以使用 Docker 的数据卷(volumes)来持久化存储 MySQL 容器中的数据。通过挂载数据卷,可以将容器内的数据存储到宿主机上的指定目录中。
docker run -d -v /path/on/host:/var/lib/mysql --name mysql_container -e MYSQL_ROOT_PASSWORD=your_password mysql:tag
mysql的相关操作
进入这步的前提是你已经进入了mysql的控制台中,下面我将介绍几个简单的sql语句.
ps:记住,所有的sql语句在末尾都要加一个;表示结束!!!!
1.查看所有的数据库
show databases;
2.进入某个数据库,如果你想从某个数据库切换到另一个数据库,也是直接用这个命令.
use 数据库名;
3.查看这个数据库中所有的表
show tables;
4.查看某个表的表结构
desc 表名;
5.查看某个表的全部信息
select * from 表名;
6.创建一个表
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
其中primary key表示为主键.
7.向标准插入一条数据
INSERT INTO users (id, name, age)
VALUES (1, 'John Doe', 25);
8.退出mysql
exit;
退出容器
exit
如果在退出容器时,系统报错 “There are stopped jobs” 提示,这意味着你可能有一些已停止的作业在后台运行。
你可以尝试使用以下命令来清除后台作业:
jobs -l
这将列出后台运行的作业及其作业号。然后,使用 kill 命令加上作业号来终止该作业,例如:
kill %1
将 %1 替换为实际的作业号。
其他基本操作请参考基本的sql语句,这里就不再细说了.