Docker学习笔记
docker服务相关命令
-
启动docker服务
sudo systemctl start docker
-
停止docker服务
sudo systemctl stop docker
-
重启docker服务
sudo systemctl restart docker
-
查看docker运行状态
sudo systemctl status docker
-
开机自启动docker
sudo systemctl enable docker
docker镜像相关命令
-
查看本地镜像
sudo docker images # 可以看到所有镜像的表格 sudo docker images -q # 可以显示所有镜像的id,一般用于删除全部的镜像
-
在网上查找需要的镜像
sudo docker search 镜像名称
-
拉取镜像到本地
sudo docker pull 镜像名称 # 当你需要指定镜像版本时 sudo docker pull 镜像名称:版本号 # 不知道具体版本号的需要到docker hub上查看
-
删除镜像
sudo docker rmi 镜像id sudo docker rmi 镜像名称:版本号 sudo docker rmi 'docker images -q' # 可以删除本地所有镜像
docker容器相关命令
-
查看容器
sudo docker ps # 查看正在运行的容器 sudo docker ps -a # 查看所有运行过的容器
-
创建及启动容器
sudo docker run 参数 # 参数说明请看下面
-
-i
: 保持容器运行。 -
-t
:为容器创建一个输入终端,通常与-i
合并成-it
,效果是容器创建之后自动进入,退出时自动关闭。 -
-d
:以后台模式运行,退出后容器也不会关闭 -
-it
:交互式容器,-id
:守护式容器 -
--name
:对容器起名字 -
实例
sudo docker run -it --name=c1 centos:latest /bin/bash sudo docker run -id --name=c2 centos:latest /bin/bash
-
-
退出和进入容器
exit # 退出当前容器 sudo docker exec -it c2 /bin/bash # 进入后台运行的容器 sudo docker stop 容器名称 # 停止容器 sudo docker rm 容器名称 # 删除容器,不能删除正在运行的容器 sudo docker inspect 容器名称 # 显示容器信息 sudo docker start 容器名称 # 重启刚刚关闭的容器
## docker挂载数据卷
在创建容器时:
```shell
docker run ... -v 宿主机目录(文件):容器内目录(文件)...
# for example
# terminal win1
sudo docker run -it --name=c3 -v ~/data:/root/data centos:7
# terminal win2
sodo docker run -it --name=c4 -v ~/data:/root/data centos:7
# 这个时候两个容器挂在到同一个宿主文件夹中
# 在cd进root的时候,记得开管理员权限
su
# terminal win1
cd ~/data
echo itcast > itcast.txt
# teiminal win2
cd ~/data
cat itcast.txt
# 可以发现,两个容器共享了数据
# terminal
exit
sudo docker rm c3
# teiminal
exit
sudo docker rm c4
# 即使把容器删除,挂在到数据卷的数据也不会被清除
su
cd ~/data
ll
cat itcast.txt
数据卷容器
sudo docker run -it --name=c3 -v /volume centos:7
# 建立一个数据卷容器,不用像以前那样指定宿主机的位置,只需要写一个容器目录
sudo docker run -it --name=c1 --volumes-from c3 centos:7
# 建立一个容器,挂在到数据卷容器上
--数据卷容器目录-from 数据卷容器名称
部署MySQL并连接到sqlyog上
- 搜索mysql镜像
docker search mysql
- 拉取mysql镜像
docker pull mysql:5.6
-
创建容器,设置端口映射、目录映射
# 在/root目录下创建mysql目录用于存储mysql数据信息 mkdir ~/mysql cd ~/mysql
docker run -id -p 3307:3306 --name=c_mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
- 参数说明:
- -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。
- -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录
- -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录
- -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
- 进入容器,操作mysql
sudo docker exec –it c_mysql /bin/bash
- 使用外部机器连接容器中的mysql
如果出现报错,报的错误代码是2058,解决办法:更改MySQL的权限,在MySQL中进行如下操作
// 授权
flush privileges; // 刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; // 更改成旧版本的加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; // 更新root用户密码
flush privileges; // 刷新权限
exit; //退出mysql
如果不知道本机的IP地址(linux):
sudo apt update
sudo apt install net-tools
sudo ifconfig -a
弹出信息:
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:93ff:fe32:6895 prefixlen 64 scopeid 0x20<link>
ether 02:42:93:32:68:95 txqueuelen 0 (Ethernet)
RX packets 954 bytes 417501 (417.5 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1025 bytes 116247 (116.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.253.131 netmask 255.255.255.0 broadcast 192.168.253.255
inet6 fe80::830c:e766:1212:ffa7 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:f9:df:7b txqueuelen 1000 (Ethernet)
RX packets 86054 bytes 122445794 (122.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 34149 bytes 2648779 (2.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 5184 bytes 427089 (427.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5184 bytes 427089 (427.0 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vethee86c18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::787a:65ff:fef0:7f8a prefixlen 64 scopeid 0x20<link>
ether 7a:7a:65:f0:7f:8a txqueuelen 0 (Ethernet)
RX packets 26 bytes 14122 (14.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 56 bytes 6866 (6.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
找ens33
的inet
的ip地址。如果不是ens33
可能就是类似命名的。
完成以后就可以在sqlyog操作虚拟机里docker的MySQL了。
部署tomcat
- 搜索tomcat镜像
docker search tomcat
- 拉取tomcat镜像
docker pull tomcat
- 创建容器,设置端口映射、目录映射
# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat
-p 8080:8080
-v $PWD:/usr/local/tomcat/webapps
tomcat
-
参数说明:
-
-p 8080:8080:将容器的8080端口映射到主机的8080端口
-v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps
-
- 使用外部机器访问tomcat