文章目录
- docker安装
- 1.卸载原来安装过的docker,如果没有安装可以不需要卸载
- 2.安装yum相关的工具,下载docker-ce.repo文件
- 3.安装docker-ce软件
- 4.启动docker服务
- docker使用nginx
- docker使用mysql
- 解决启动失败的问题
docker安装
centos下安装docker
这里参考docker官方教程:https://docs.docker.com/engine/install/centos/
1.卸载原来安装过的docker,如果没有安装可以不需要卸载
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
2.安装yum相关的工具,下载docker-ce.repo文件
[root@localhost ~]# yum install -y yum-utils -y[root@localhost ~]# yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
下载docker-ce.repo文件存放在/etc/yum.repos.d
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost 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
3.安装docker-ce软件
container engine 容器引擎
docker是一个容器管理的软件
docker-ce 是服务器端软件 server
docker-ce-cli 是客户端软件 client
docker-compose-plugin 是compose插件,用来批量启动很多容器,在单台机器上
containerd.io 底层用来启动容器的
[root@localhost yum.repos.d]# yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
[root@localhost yum.repos.d]# docker --version
Docker version 20.10.17, build 100c701
4.启动docker服务
[root@localhost ~]# systemctl start docker
[root@localhost ~]# ps aux|grep docker
root 1893 0.9 3.4 1160644 64268 ? Ssl 09:58 0:00 /usr/bin/dockerd H fd:// --containerd=/run/containerd/containerd.sock
root 2015 0.0 0.0 112824 988 pts/0 S+ 09:59 0:00 grep --color=auto docker 设置docker服务开机启动
[root@cali 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.
docker启动的每一个容器背后就是一个linux进程
docker ps 查看有哪些docker容器在运行
docker images 查看有哪些已下载的镜像
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker使用nginx
下载nginx镜像
镜像: 来源默认从docker官方提供的网站dockerhub去下载
https://hub.docker.com/:Docker Hub is the world’s largest library and community for container images
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
7a6db449b51b: Pull complete
ca1981974b58: Pull complete
d4019c921e20: Pull complete
7cb804d746d4: Pull complete
e7a561826262: Pull complete
7247f6e5c182: Pull complete
Digest: sha256:b95a99feebf7797479e0c5eb5ec0bdfa5d9f504bc94da550c2f58e839ea6914f
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 2b7d6430f78d 2 days ago 142MB
启动nginx
docker run -d -p 8090:80 --name my-nginx1 nginx
docker run 是启动容器的命令、 -d 在后台运行 daemon 守护进程、
-p 8090:80 指定端口映射 访问本机的8090端口,转发到docker容器的80端口、
–name my-nginx1 指定容器的名字(可以在容器里启动多个nginx,故自定义命名)、 nginx 是镜像的名字
[root@localhost ~]# docker run -d -p 8090:80 --name my-nginx1 nginx
a96a9f4a606fe9ae8e24883afe6bac56b74466aba6a0f99100fc09bd54cc3a5f
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a96a9f4a606f nginx "/docker-entrypoint.…" 12 seconds ago Up 10 seconds 0.0.0.0:8090->80/tcp, :::8090->80/tcp my-nginx1
这是我们可以去测试一下nginx服务是否生效
在浏览器中访问ip+端口 ,这里注意是访问本机的ip及设置的进程端口号,docker会映射到内部的nginx服务。
docker使用mysql
下载mysql镜像
可以指定下载mysql的指定版本,如不指定版本则默认下载最新的版本lastest
[root@localhost ~]# 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@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.39 daff57b7d2d1 27 hours ago 430MB
nginx latest 2b7d6430f78d 2 days ago 142MB
启动mysql
启动时需要注意端口的设置,本机如果已经安装过mysql那么3306端口是已经被占用的,这时可以设置其他的任意未被使用的端口
[root@localhost ~]# docker run -d --name sc-mysql-01 -p 33060:3306 -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.39
860e9a975abbb4a95f2f75163cccdc6f632f1948deba62ea3af6447e851b49a2
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fb8f451d71f3 mysql:5.7.39 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 33060/tcp, 0.0.0.0:33060->3306/tcp, :::33060->3306/tcp sc-mysql-1
bda1e5c73838 nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp my-nginx1
进入mysql进行使用
docker exec -it sc-mysql-01 bash
docker exec 进入容器内容,执行命令 execute、-it 开启一个终端,交互式登陆进入、sc-mysql-1 容器的名字、bash 进入容器里运行的程序
[root@localhost ~]# docker exec -it sc-mysql-01 bash
bash-4.2#
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> quit;
Byebash-4.2# exit
exit
开启多个mysql
[root@localhost ~]# docker run -d --name sc-mysql-2 -p 33061:3306 -e MYSQL_ROOT_PASSWORD='sc123456' mysql:5.7.39
abf4f29540f44d3ababdd9c444d4d9bd44de0360cbcc585d406de918e4968fcc
[root@cali yum.repos.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abf4f29540f4 mysql:5.7.39 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 33060/tcp, 0.0.0.0:33061->3306/tcp, :::33061->3306/tcp sc-mysql-2
fb8f451d71f3 mysql:5.7.39 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 33060/tcp, 0.0.0.0:33060->3306/tcp, :::33060->3306/tcp sc-mysql-1
bda1e5c73838 nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp my-nginx
[root@localhost ~]#
启动后也可以在Windows中使用SQLyong去进行连接mysql
解决启动失败的问题
如果在docker run 启动服务时有失败的现象
可以使用docker ps -a 先查看详细信息
Exited即为启动失败的服务
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a5b752cc4485 mysql:5.7.39 "docker-entrypoint.s…" 6 minutes ago Exited (1) 6 minutes ago sc-mysql-1
bda1e5c73838 nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8090->80/tcp, :::8090->80/tcp sc-nginx
查看容器启动失败的日志
[root@localhost ~]# docker logs a5b752cc4485
找到错误原因后就可以在下一次启动时更正这个错误
但是并不能直接去重新启动这个服务
删除启动失败的容器,正在运行的容器不能直接删除
[root@localhost ~]# docker rm sc-mysql-1
sc-mysql-1
删除后再去docker run服务即可
如果在服务运行时,关闭防火墙或者清除防火墙规则,会导致iptables里的docker相关SNAT或者DNAT等策略失效,那么容器将不能和外面的机器通信
重启docker服务,会自动添加docker相关的iptables规则
service docker restart
删除启动失败的容器,正在运行的容器不能直接删除
[root@localhost ~]# docker rm sc-mysql-1
sc-mysql-1
删除后再去docker run服务即可
如果在服务运行时,关闭防火墙或者清除防火墙规则,会导致iptables里的docker相关SNAT或者DNAT等策略失效,那么容器将不能和外面的机器通信
重启docker服务,会自动添加docker相关的iptables规则
service docker restart
不过会导致所有的正在运行的容器暂停,再重新启动即可